gpt4 book ai didi

java - Hibernate 与不同表的一对一映射可以单独存在

转载 作者:行者123 更新时间:2023-12-01 10:16:29 25 4
gpt4 key购买 nike

我有 2 张 table :1)交易表2) 付款表场景是:交易表中的记录可以存在,而付款中没有记录表。

我需要在交易和付款表之间建立一对一的映射。今天可以进行交易,也可以稍后进行付款。但支付表中的记录应该在交易表中有一个映射。

交易表:id为主键

可付款:id为主键transaction_Id作为外键引用Transaction表中的id。

我正在做如下:

@Entity
@Table(name = "Transaction_Table")
public class Transaction {
@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "SOMESEQ")
@SequenceGenerator(name = "SOMESEQ", sequenceName = "SOMESEQ")
@Column(name = "ID",unique = true, nullable = false)
private Integer id;

@OneToOne(cascade = CascadeType.ALL, fetch = FetchType.LAZY)
@JoinColumn(name = "transaction_Id", insertable = false, updatable = false)
private Payment payment;

... other properties
}

@Entity
@Table(name = "Payment_Table")
public class Payment {
@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "SOMESEQ2")
@SequenceGenerator(name = "SOMESEQ2", sequenceName = "SOMESEQ2")
@Column(name = "ID",unique = true, nullable = false)
private Integer id;

@OneToOne
@PrimaryKeyJoinColumn
private Transaction trn;

... other properties
}

现在,如果我尝试插入交易表,则会出现错误“约束违规”,因为将 null 插入付款表的 transaction_Id 中。

如何更改我的代码,以便如果我插入交易表,那么它不应该尝试插入付款表。当我保存到付款表中时,它会获取其外键值(当我从交易表中获取记录时设置 - 如何设置它?通过付款类的 setter ?)

大家能推荐一下吗?

最佳答案

您可以引用下面的链接了解 hibernate 中的一对一关系 http://www.tutorialspoint.com/hibernate/hibernate_one_to_one_mapping.htm

实际上两个表之间应该有相同的主键,即交易表的主键也应该引用付款表的主键。

关于java - Hibernate 与不同表的一对一映射可以单独存在,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35861083/

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