2011-05-04 96 views
1

我在數據庫中使用了休眠和預插入觸發器。讓我解釋一下這個場景。 我有兩個表,說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; 
} 

由於

回答

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發電機。

參見:

+0

感謝lot.It工作了我,我被卡住了相當長的一段時間now.Thanks一次。 – Shubhra 2011-05-05 06:20:48

+0

很高興看到我的自定義ID生成器幫助你! – jplandrain 2013-11-20 10:15:20