2010-04-01 199 views
5

更少的列我有11列的表,但我需要得到其中只有2在我的申請,我使用的是春/休眠/ DAO組合。現在我有一個包含所有11個字段的域類,以及映射表中所有11個列的映射文件。我如何使用其中的2個並非全部?掌握休眠

回答

10

或者:

  1. 用突起 - 臨:沒有補充 - 缺點:不是類型安全的(結果是行的List其中每行是一個Object[])

    select f.foo, f.bar from FatEntity f 
    
  2. 使用SELECT子句中的構造函數表達式(指定的類不需要是實體或映射到數據庫) - Pro:類型安全解決方案 - Con:更多類,除非您在此情況下重複使用FatEntity作爲所有者許多領域將是null

    select new com.acme.FatEntityDetails(f.id, f.foo, f.bar) from FatEntity f 
    

    注意,如果SELECT NEW子句中指定一個實體類的名字,結果實體實例是在狀態(沒有持久化標識)。

  3. 使用映射到同一個表,只有所需的字段的另一個實體 - 臨:這是可以修改和更新一個真正的實體 - 缺點:更多的類。

    from LightEntity 
    

之間#2和#3的主要差別是:

  • 2不需要保持器是一個實體在所有。

  • #2中的持有者可能是映射到另一個表上的實體。
  • 如果#2返回實體,它們處於新狀態(這可能是個問題,或者不是)。
+0

@帕斯卡爾Thivent我不能只留下我的領域類和映射文件中的2個字段? – 2010-04-02 08:05:47

+0

@Gandalf嗯,我以爲有人在使用其他領域。如果不是這樣,那麼你確實可以改變你現在的實體。 – 2010-04-02 08:12:19

+0

感謝您提供多種解決方案和解釋,您怎麼想到的呢?的expirience?看書,培訓?我會接受你的回答。如果你能指向正確的方向,那將是很棒的,比如:網站,例子,書籍。 – 2010-04-02 08:38:53

6

嘗試:

SELECT myEntity.one, myEntity.two FROM MyEntity myEntity 

你甚至可以這樣做:

SELECT new MyEntityDescription(myEntity.one, myEntity.two) FROM MyEntity myEntity 

得到實體描述的列表。

2

如果你從來沒有需要比表中的兩列以上,你可以改變你的Hibernate映射,只有那些需要2列映射到實體類。只映射要在應用程序中訪問的表列。請記住,「忽略」列上的數據庫約束可能會違反,如非空約束,外鍵或唯一約束。

+0

怎麼樣域類,我需要有2場在那裏呢? – 2010-04-01 13:58:43