休眠和数据库触发器

时间:2011-05-04 06:08:32

标签: hibernate

我在数据库中使用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;
}

由于

1 个答案:

答案 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生成器。

另见: