Я пытаюсь установить сущность устаревшей БД
У меня есть две таблицы, у которых нет 3-й объединяющей таблицы для сопоставления
у обеих есть собственный внешний ключ, который можно сопоставить с противоположной таблицей
, чтобы их отношение как N: M
Reservation ExchangeRate
----------- ------------
id id
... ...
exc_set_id exc_set_id
------------ ------------
выглядит примерно так же, как @ ManyToMany без таблицы соединения (устаревшая база данных)
, поэтому я попробовал как ссылка выше
@Entity
@Table(name = "TB_RESERVATION")
public class Reservation {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "res_idx")
private Long id;
...
@OneToMany
@JoinColumn(name = "exc_set_idx", referencedColumnName = "exc_set_idx",insertable = false,updatable = false)
private Set<ExchangeRate> exchangeRateSet = new LinkedHashSet<>();
}
@Entity
@Table(name="TB_EXCHANGE_RATE")
public class ExchangeRate {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name="exc_idx")
private Long id;
//no need bidirectional.
}
Это дает мне исключение, когда я проверяю это.
Caused by: org.hibernate.cfg.RecoverableException: Unable to find column with logical name: EXC_SET_IDX in org.hibernate.mapping.Table(TB_RESERVATION) and its related supertables and secondary tables
at org.hibernate.cfg.Ejb3JoinColumn.checkReferencedColumnsType(Ejb3JoinColumn.java:837)
at org.hibernate.cfg.BinderHelper.createSyntheticPropertyReference(BinderHelper.java:256)
at org.hibernate.cfg.annotations.CollectionBinder.bindCollectionSecondPass(CollectionBinder.java:1634)
... 56 more
Caused by: org.hibernate.MappingException: Unable to find column with logical name: EXC_SET_IDX in org.hibernate.mapping.Table(TB_RESERVATION) and its related supertables and secondary tables
at org.hibernate.cfg.Ejb3JoinColumn.checkReferencedColumnsType(Ejb3JoinColumn.java:832)
... 58 more
Это действительно странно, потому что в TB_RESERVATION есть столбец EXC_SET_IDX, очевидно.
, когда я меняю Подобная сущность резервирования (удаление referencedColumnName)
@Entity
@Table(name = "TB_RESERVATION")
public class Reservation {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "res_idx")
private Long id;
@OneToMany
@JoinColumn(name = "exc_set_idx",insertable = false,updatable = false)
private Set<ExchangeRate> exchangeRateSet = new LinkedHashSet<>();
}
Нет исключения, но неправильный запрос.
select
...
from
TB_RESERVATION reservatio0_
inner join TB_EXCHANGE_RATE exchangera4_ on reservatio0_.res_idx = exchangera4_.exc_set_idx
//what I have to
//inner join TB_EXCHANGE_RATE exchangera4_ on reservatio0_.exc_set_idx= exchangera4_.exc_set_idx
Это первый раз, когда я использую JPA.
Confused. Пожалуйста, дайте мне совет. спасибо