Hibernate 与不同表的一对一映射,一个可以存在,没有其他

Hibernate one to one mapping with different tables one can exist without other

我有 2 个 table: 1) 交易 table 2) 付款 table 场景是: 交易记录 table 可以在没有支付记录的情况下存在 table.

我需要在交易和支付之间建立一对一的映射 table。 交易可以今天完成,付款也可以稍后完成。但是付款 table 中的记录应该在交易 table.

中有一个映射

交易table: id为主键

可支付: id 作为主键 transaction_Id 作为外键引用事务 table.

中的 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
}

现在,如果我尝试在交易 table 中插入,它会给出错误 "constraint violation" 将 null 插入付款 table 的 transaction_Id。

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

各位大佬能给点建议吗?

你可以参考下面link休眠中的一对一关系 http://www.tutorialspoint.com/hibernate/hibernate_one_to_one_mapping.htm

实际上两个 table 之间应该有相同的主键,即交易 table 的主键也应该参考付款 table 的主键。