2010-08-09 82 views
1

我希望Hibernate 3.3.0通過在INSERTpersist())之前執行SELECT查詢來生成值。這將這樣的工作:Hibernate:由SQL查詢生成的值

@Generated(GenerationTime.INSERT) 
@GenerateSQL("SELECT RANDOM() * 2") 
private int number; 

我看了一下@Generated(),這是很好的TRIGGER秒。我不想引入觸發器。

我也看了@Formula,這是隻讀的。

那麼,什麼是標註的正確組合?謝謝。

回答

1

我想休眠3.3.0通過INSERT

我不認爲這是支持前執行SELECT查詢以生成一個值。

選擇#1:您可以在代碼中直接執行SELECT作爲「創建」邏輯的一部分。

備選#2:使用休眠攔截器,提供對SessionFactory的引用,並在onSave從攔截器執行SELECT。

那麼,什麼是標註的正確組合?

設置默認值實際上得不到支持(請參閱HHH-4341),最簡單的解決方案是IMO在列級別定義DEFAULT值。這將是我的替代#3。下面的例子:

@Generated(GenerationTime.INSERT) 
@Column(insertable=false, columnDefinition="INT DEFAULT 20") 
private int someNumber; 

我不知道這是一個選擇,我不知道,如果在默認情況下使用RANDOM()會由數據庫支持(怎麼可能RANDOM() * 2成爲int由辦法?)。

+0

廣告#1 - 嗯,我想我會在最後這一點。但是這需要我將交易提升到更高層次的抽象。 廣告'RANDOM()''主場迎戰int' - 好吧,你讓我:)真正的使用情況是代發票號的這不單純是一個序列(取消發票等) – 2010-08-10 03:56:58

+0

@Ondra我想這是一個例如:)但我明白了。儘管如此,我沒有更好的建議。 – 2010-08-10 09:35:45