gpt4 book ai didi

java - 如何使用外键将两个表映射到一个实体?

转载 作者:塔克拉玛干 更新时间:2023-11-02 18:58:10 25 4
gpt4 key购买 nike

我有一个与此非常相似的问题: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:无法在 org.hibernate.mapping.Table(CUSTOMERS) 及其相关的 super 表和辅助表中找到逻辑名称为 DETAIL_ID 的列

最佳答案

对于寻找此问题答案的任何人来说,使用@SecondaryTable 并不是连接具有非主键列的两个表的方法,因为默认情况下,Hibernate 将尝试通过主键关联两个表;你必须使用@OneToMany 评论http://viralpatel.net/blogs/hibernate-one-to-many-annotation-tutorial/对于解决方案,这是一个代码片段,以防 url 停止工作:

客户类别:

@Entity
@Table(name="CUSTOMERS")
public class Customer {

@Id
@GeneratedValue
@Column(name="CUSTOMER_ID")
private Integer id;

@ManyToOne
@JoinColumn(name="DETAIL_ID")
private Details details;

// Getter and Setter methods...
}

详细信息类:

@Entity
@Table(name="DETAILS")
public class Details {

@Id
@GeneratedValue
@Column(name="DETAIL_ID")
private int detailId;

@Column(name="OTHER")
private String other;

@OneToMany(mappedBy="details")
private Set<Customer> customers;

// Getter and Setter methods...
}

这可以通过 hibernate 使用以下代码轻松访问:

Session session = HibernateUtil.getSessionFactory().openSession();
Query query = session.createQuery("select id, details.other from Customer");

我希望这能帮助像我一样花费数小时寻找实现这一目标的方法的任何人。

关于java - 如何使用外键将两个表映射到一个实体?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10418121/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com