2011-10-24 44 views
1

我有休眠:從一個可調用的自定義接收生成的ID插入

@Entity 
@SQLInsert(callable = true, sql = "{ call sp_InsertEntity(?, ?, ?) }") 
public class Entity { 
    @Id 
    @GeneratedValue(strategy = GenerationType.IDENTITY) 
    @Column(name = "entity_id") 
    private int entityId; 
... 
} 

sp_InsertEntity確實標準INSERT並返回@@ IDENTITY實體類。 但是在session.save(entity)entityId值保持爲0之後。

如何強制Hibernate使用返回值或輸出參數或@@ IDENTITY或SCOPE_IDENTITY()生成ID初始化?

+0

我在設置 false時發現瞭解決方案 nomad

回答

2

也許爲其他人遇到同樣的問題澄清一下 - 當你使用<property name="jdbc.use_get_generated_keys">false</property>時,hibernate不會在你的程序後自動生成它的SELECT SCOPE_IDENTITY()(這顯然不起作用,因爲該select與insert不在同一範圍內),因此您必須在存儲過程中插入後手動添加SELECT SCOPE_IDENTITY()。

以這種方式編寫插入存儲過程也將使它們與Entity Framework如何處理事物兼容,這是一個很好的補充。