【发布时间】:2012-05-12 04:27:05
【问题描述】:
我有一个与此非常相似的问题:How do I join tables on non-primary key columns in secondary tables? 但我不确定我是否可以应用相同的解决方案。
我有两张这样的表:
CREATE TABLE CUSTOMER
(
CUSTOMER_ID INTEGER NOT NULL,
DETAIL_ID INTEGER NOT NULL,
PRIMARY KEY( CUSTOMER_ID ),
CONSTRAINT cust_fk FOREIGN KEY( DETAIL_ID ) REFERENCES DETAILS( DETAIL_ID )
)
CREATE TABLE DETAILS
(
DETAIL_ID INTEGER NOT NULL,
OTHER INTEGER NOT NULL,
PRIMARY KEY( DETAIL_ID )
)
我想将这些表映射到一个名为 Customer 的类,所以我有:
@Entity
@Table(name = "CUSTOMERS")
@SecondaryTable(name = "DETAILS", pkJoinColumns=@PrimaryKeyJoinColumn(name="DETAIL_ID"))
public class Customer {
@Id
@GeneratedValue
@Column(name = "CUSTOMER_ID")
private Integer id;
@Column(table = "DETAILS", name = "OTHER")
private Integer notes;
// ...
}
但这仅在DETAIL_ID 与主表中的CUSTOMER_ID 匹配时才有效。
所以我的问题是:如何使用主表中的外键字段来加入辅助表的主键?
更新 我尝试设置:
@SecondaryTable(name = "DETAILS", pkJoinColumns=@PrimaryKeyJoinColumn(name="DETAIL_ID", referencedColumnName="DETAIL_ID"))
但是当我运行应用程序时,我得到了这个异常:
org.hibernate.MappingException: Unable to find column with logical name: DETAIL_ID in org.hibernate.mapping.Table(CUSTOMERS) and its related supertables and secondary tables
【问题讨论】:
-
好的,所以你有两个表,你想把它们连接到一个表中?
-
@SerenityStackHolder 是的,我想在一个实体上映射两个表。但是我在主表中有一个外键到辅助表。