Получение ошибки при попытке выполнить сопоставление 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, которые будут состоять из множества деталей, таких как идентификатор учетной записи и его конкретная версия в соответствии с выбором пользователя из пользовательского интерфейса, и при этом будет создан один идентификатор настройки, и этот идентификатор установки должен быть сохранен в таблице счетов. Чтобы я мог получить информацию об учетной записи, выполнив поиск по идентификатору настройки.