2011-10-27 15 views
3

我有一個數域/業務對象,它在休眠標準,使用時由字段名稱引用爲一個字符串,例如:串去耦和字段名

Criteria crit = session.createCriteria(User.class); 
Order myOrdering = Order.desc("firstname"); 
crit.addOrder(myOrdering); 

User.class的字段/屬性。

我可以手動創建一個枚舉並將所有的字符串存儲在那裏;有沒有其他的方式,我失蹤,需要較少的工作(我可能會忘記維持枚舉)。

回答

1

這是讓我對Hibernate感到惱火的事情之一。在任何情況下,我都使用兩種機制之一解決了這個問題,可以自定義用於從Hibernate配置文件生成基類的模板,或者詢問我的Hibernate類的註釋/屬性並生成適當的枚舉,類,常量等等。這非常直截了當。

它爲構建過程增加了一個步驟,但IMO完全正是我所需要的。 (最後幾個項目我沒有做到,但對於大型,多開發的東西,我真的很喜歡它。)

+0

「詢問我的Hibernate類的註釋/屬性並生成適當的枚舉」聽起來不錯,我該怎麼辦那? – NimChimpsky

+1

與任何反射程序相同,編寫一個可以掃描類的Hibernate註釋的裝飾品,或者提供一個Hibernate類的包,並假設它們都是「重要的」等等。請參見[this SO question](http:// stackoverflow .com/questions/738065/java-annotations)來獲得關於註釋查找的詳細信息(首先,我發現,我沒有很努力:(抓住屬性,將它們放到某種模板上下文中,模板寫入樣板。 peasy。 –

3

恐怕沒有一個好的方法來做到這一點。 即使您決定使用反射,只有在查詢運行時纔會發現問題。

但是有一些更好的解決方案,提早發現問題:如果使用命名查詢(javax.persistence.NamedQueries),只要實體由Hibernate處理,就會得到所有查詢,所以基本上它會在服務器啓動時發生。所以如果某個對象改變了查詢,那麼下次啓動服務器時就會知道它,而不是查詢實際運行時。

希望它有幫助。