JPA(EclipseLink)SecondaryTable与Java 1.7错误连接

时间:2018-11-21 09:09:26

标签: java jpa eclipselink

我已经创建了一个实体,该实体使用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 secondarytable和Java 1.7是否有问题?

1 个答案:

答案 0 :(得分:0)

解决方案来自避免由字段CUST_DETAIL_ID的名称引起的混淆,JPA需要知道哪个表属于表,以及属性custDetail I d和custDetail P < / strong> 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;

    ...
}