到了Hibernate3.0以後,關聯關係的物件預設都是使用延遲載入,例如
在網上查詢資料,說在為了延遲載入
仔細閱讀了Hibernate的手冊,才發現原來要延遲載入
總結一下:
而
如果當constrained="true",且lazy="proxy"(預設),是可以延遲載入的.
如果當constrained="true",且lazy="true"時,需要經過執行期位元組碼增加,延遲載入才會奏效.
使用hibernate後,觀念應該轉變過來, 一個物件應該是完整, 所以沒法返回一個只包含某幾個屬性(欄位) 的物件。 例如,一個人,就不能只返回一個頭, 還是手什麼的
如果資料量過大, 當然還是有這個必要. 也可以做到, 但是返回的不會是物件,而是欄位陣列.
hibernate 管這叫投影 Criteria criteria=session.createCriteria(User.class);
ProjectionList proList = Projections.projectionList();//設定投影集合 proList.add(Projections.groupProperty("userName")); proList.add(Projections.groupProperty("password")); criteria.setProjection(proList);
最後返回的List是 Object[] , [0] = userName, [1] = password 如果你真的只用來查 userName,password, 那就小題大做了 我想直接取出view(String userName,String password)的形式,
即hql:select new view(userName,password) from ....
兩種方法 1 屬性的延遲載入
在hbm.xml的屬性上加 lazy=true
2 輕量設計
單獨設計一個類, 只包含 userName 和password
我的意思就是設計了一個類用來存放username和password,但是Criteria能返回這個bean型別的一個List嗎?
再寫一個xml啊, 沒人規定一張表只能對映一次
輕量的employee對映
到了Hibernate3.0以後,關聯關係的物件預設都是使用延遲載入,例如
在網上查詢資料,說在為了延遲載入
仔細閱讀了Hibernate的手冊,才發現原來要延遲載入
總結一下:
而
如果當constrained="true",且lazy="proxy"(預設),是可以延遲載入的.
如果當constrained="true",且lazy="true"時,需要經過執行期位元組碼增加,延遲載入才會奏效.
使用hibernate後,觀念應該轉變過來, 一個物件應該是完整, 所以沒法返回一個只包含某幾個屬性(欄位) 的物件。 例如,一個人,就不能只返回一個頭, 還是手什麼的
如果資料量過大, 當然還是有這個必要. 也可以做到, 但是返回的不會是物件,而是欄位陣列.
hibernate 管這叫投影 Criteria criteria=session.createCriteria(User.class);
ProjectionList proList = Projections.projectionList();//設定投影集合 proList.add(Projections.groupProperty("userName")); proList.add(Projections.groupProperty("password")); criteria.setProjection(proList);
最後返回的List是 Object[] , [0] = userName, [1] = password 如果你真的只用來查 userName,password, 那就小題大做了 我想直接取出view(String userName,String password)的形式,
即hql:select new view(userName,password) from ....
兩種方法 1 屬性的延遲載入
在hbm.xml的屬性上加 lazy=true
2 輕量設計
單獨設計一個類, 只包含 userName 和password
我的意思就是設計了一個類用來存放username和password,但是Criteria能返回這個bean型別的一個List嗎?
再寫一個xml啊, 沒人規定一張表只能對映一次
輕量的employee對映