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 的主键。
我有 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 的主键。