java Hibernate:在两个属性中生成相同的值
我希望生成第一个:
@Id
@Column(name = "PRODUCT_ID", unique = true, nullable = false, precision = 12,
scale = 0)
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "PROD_GEN")
@BusinessKey
public Long getAId() {
return this.aId;
}
我希望最初的出价与援助完全一样。一种方法是插入实体,然后获取DB生成的aId(第二次查询),然后更新实体,将bId设置为等于aId(第三次查询)。有没有办法让投标获得与援助相同的产生价值
请注意,之后,我希望能够从gui更新bId
如果解决方案是JPA,那就更好了
# 1 楼答案
选择你的毒药:
选项#1
您可以将
bId
注释为org.hibernate.annotations.Generated
,并在插入时使用数据库触发器(我假设nextval
已经分配给AID,因此我们将分配curval
进行BID):我不太喜欢触发器和幕后发生的事情,但这似乎是最简单的选择(但不是便携性的最佳选择)
选项2
创建一个新实体,保存它,刷新实体管理器以获得分配的id,在
bId
上设置aId
,合并实体很难看,但很管用
选项3
使用回调注释设置内存中的
bId
(直到写入数据库):如果您不需要在insert上写入id,那么这应该是可行的(但在这种情况下,请参见选项4)
选项4
实际上,您可以在
bId
的getter中添加一些逻辑,而不是使用回调:同样,如果您不需要在插入时将id持久化到数据库中,这将起作用
# 2 楼答案
如果您使用JPA,在插入新的A之后,id应该设置为生成的值,i tough(可能取决于您使用的JPA提供者),因此不需要第二次查询。然后在DAO中将bld设置为ald值