JPA (EclipseLink) SecondaryTable 错误加入 java 1.7
JPA (EclipseLink) SecondaryTable erroneous join with java 1.7
我使用 SecondaryTable 注释
创建了一个加入客户 table 和客户详细信息 table 的实体
@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和java1.7有什么问题吗?
解决方案来自避免由字段名称 CUST_DETAIL_ID 引起的混淆,JPA 需要知道 table 属于什么,以及属性名称 custDetailI d 和 custDetailPk 必须按字母顺序排列。
@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;
...
}
我使用 SecondaryTable 注释
创建了一个加入客户 table 和客户详细信息 table 的实体@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和java1.7有什么问题吗?
解决方案来自避免由字段名称 CUST_DETAIL_ID 引起的混淆,JPA 需要知道 table 属于什么,以及属性名称 custDetailI d 和 custDetailPk 必须按字母顺序排列。
@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;
...
}