Ошибка при попытке сопоставления отношений сущностей - вызвано: org.hibernate.AnnotationException - PullRequest
0 голосов
/ 07 января 2019

Получение ошибки при попытке выполнить сопоставление OneToMany и ManyToOne - Ошибка: -> Причина: org.hibernate.AnnotationException: внешний ключ, ссылающийся на com.xx.xx.xx.entities.SoftwareSetup от com.xx.xx.xx .entities.SoftwareAccount имеет неправильный номер столбца. должно быть 1

Первичный ключ для таблицы учетных записей является составным, поскольку в нем объединены идентификатор учетной записи и версия. Итак, в основном для каждой версии одного идентификатора аккаунта может быть несколько номеров настроек. Из-за составного ключа я не могу достичь желаемого результата.

Получение ошибки, как показано ниже,

Причина: org.hibernate.AnnotationException: Внешний ключ, ссылающийся на com.xx.xx.xx.entities.SoftwareSetup из com.xx.xx.xx.entities.SoftwareAccount, имеет неправильный номер столбца. должно быть 1

Примечание. По отдельности я могу выполнить операцию CRUD для таблицы и получить данные в формате JSON. Кроме того, если я использую отображение @ManyToOne в SoftwareAccount, тогда я могу видеть конкретную строку настройки в моих данных JSON для учетной записи.

Для более подробной информации, пожалуйста, смотрите мои фрагменты кода ниже. Я изменил свои имена классов и полей из-за некоторых ограничений. Дайте мне знать, если вам понадобятся какие-то подробности, чтобы помочь мне с этим. Заранее спасибо.

@Entity
public class SoftwareAccount implements Serializable
{
@EmbeddedId
private SoftwareAccountId saId;

/*@ManyToOne(cascade=CascadeType.ALL)
      @JoinColumn(name = "setupId")
  private SoftwareSetup softwareSetup;*/ 


}

 /*If Uncommented this @ManyToOne line then whole setup object data will 
   show in JSON as below : 
   URL - http://localhost:8009/softwareAccount */

  {
    "saId": {
        "accountVersion": 1,
        "accountId": "AC101_B01_EUR_E"
    },
    "status": "Active",
    "softwareSetup": {
        "setupId": 101,
        "description": "Description 1",
        "status": "Active",
        "softwareAccountSet": []
    }
  }


@Embeddable
public class SoftwareAccountId implements Serializable
{

@Column
private long accountVersion;
@Column
private String accountId;

}

@Entity
public class SoftwareSetup implements Serializable 
{
@Id
@GeneratedValue(strategy=GenerationType.AUTO)
private long setupId;

@OneToMany(cascade = CascadeType.ALL)
@JoinColumns({ @JoinColumn(name = "saId.accountVersion"), 
    @JoinColumn(name = "saId.accountId") })
private Set<SoftwareAccount> softwareAccountSet


}
/* Error comes when @JoinColumns line is present. If this line is been 
    commented then the below JSON data comes and a bridge table gets 
    created with 3 columns: accountId, accountVersion and setupId .

URL - http://localhost:8009/softwareSetup */

{
    "setupId": 101,
    "description": "Description 1",
    "status": "Active",
    "softwareAccountSet": []
}

Я ожидаю получить данные JSON, которые будут состоять из множества деталей, таких как идентификатор учетной записи и его конкретная версия в соответствии с выбором пользователя из пользовательского интерфейса, и при этом будет создан один идентификатор настройки, и этот идентификатор установки должен быть сохранен в таблице счетов. Чтобы я мог получить информацию об учетной записи, выполнив поиск по идентификатору настройки.

...