我在数据库中使用hibernate和pre-insert触发器。让我解释一下这个场景。 我有两个表,例如A和B.在两个表中,主键通过预插入触发器插入。 A中的主键是B中的外键。因此,当我插入这些表时,B中的外键列应填充A的触发值(主键值)。但它并没有像我期待的那样发生。两个表中的主键都正确插入,但外键列保持获取值0而不是实际应该获得的触发值。 表有一对多的关系。
这两张表就像 -
class Employee {
private int RECORDID;
@OneToMany(cascade=cascadeType.ALL)
@JoinColumn(name="MASTERRECORDID" , referencedColumnName="RECORDID")
private Collection<EmployeeDetails> employeeDetails = new ArrayList<EmployeeDetails>();
}
class EmployeeDetails{
private int RECORDID;
private int MASTERRECORDID;
}
由于
答案 0 :(得分:2)
Hibernate不支持开箱即用的触发器生成的主键。
您可以使用Before Insert Trigger and ID generator中描述的自定义标识生成器:
class Employee {
@Id @GeneratedValue(generator = "trigger_gen")
@GenericGenerator(name = "trigger_gen",
value = "jpl.hibernate.util.TriggerAssignedIdentityGenerator")
private int RECORDID;
...
}
或者,如果您的实体具有非PK唯一字段,则可以使用内置select
生成器。
另见: