JPA (EclipseLink) SecondaryTable ошибочное соединение с Java 1.7 - PullRequest
0 голосов
/ 21 ноября 2018

Я создал сущность, соединяющую таблицу Customer с таблицей сведений о клиенте с помощью аннотации SecondaryTable

@Entity
@Table(name="CUSTOMER")
@SecondaryTable(name="CUST_DETAIL", 
            pkJoinColumns=@PrimaryKeyJoinColumn(name="CUST_DETAIL_ID", referencedColumnName = "CUST_DETAIL_ID"))
public class Customer {
    @Id
    @Column(name = "CUST_ID")
    private Long id;

    @Column(name = "CUST_DETAIL_ID")
    private Long custDetailPk;

    @Column(name = "CUST_DETAIL_ID", table = "CUST_DETAIL")
    private Long custDetailId;

    ...
} 

Он работает с Java 1.6, сгенерированный запрос похож на

SELECT t0.CUST_ID, t0.CUST_DETAIL_ID, t1.CUST_DETAIL_ID, ... FROM CUSTOMER t0, CUST_DETAIL t1 WHERE t1.CUST_DETAIL_ID = t0.CUST_DETAIL_ID

, но когдаЯ перехожу на Java 1.7, сгенерированный запрос выглядит ошибочно

SELECT t0.CUST_ID, t1.CUST_DETAIL_ID, t0.CUST_DETAIL_ID, ... FROM CUSTOMER t0, CUST_DETAIL t1 WHERE t1.CUST_DETAIL_ID = t1.CUST_DETAIL_ID

и возвращает несколько строк.

Есть ли какие-либо проблемы с вторичной таблицей jpa и java 1.7?

1 Ответ

0 голосов
/ 26 ноября 2018

Решение заключается в том, чтобы избежать путаницы, вызванной именами полей CUST_DETAIL_ID, JPA необходимо знать, к какой таблице принадлежит, и именем свойств custDetail I d и custDetail P k, что он должен быть упорядочен в алфавитном порядке.

@Entity
@Table(name="CUSTOMER")
@SecondaryTable(name="CUST_DETAIL", 
            pkJoinColumns=@PrimaryKeyJoinColumn(name="CUST_DETAIL_ID", referencedColumnName = "CUST_DETAIL_ID"))
public class Customer {
    @Id
    @Column(name = "CUST_ID")
    private Long id;

    @Column(name = "CUST_DETAIL_ID", table = "CUSTOMER")
    private Long custDetailId;

    @Column(name = "CUST_DETAIL_ID", table = "CUST_DETAIL")
    private Long custDetailPk;

    ...
} 
...