Отображение ManyToMany без таблицы соединений - PullRequest
0 голосов
/ 24 апреля 2020

Я пытаюсь установить сущность устаревшей БД
У меня есть две таблицы, у которых нет 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. Пожалуйста, дайте мне совет. спасибо

...