Hibernate如何只取出需要的欄位
阿新 • • 發佈:2019-02-16
mysql我們在寫sql語句的時候都知道怎麼查詢需要的欄位,那麼Hibernate怎麼寫呢?
首先看下我們的資料庫表(案例)。
首先我們要知道mysql怎麼寫呢?
例如我們只需要numberId和number
select u.numberId,u.number from number_pool u where u.numberId = 1;
在mysql中執行正確。
mysql我們拿到了需要的欄位,那Hibernate怎麼寫呢?
String hql = "select new NumberPool(n.numberId, n.number) from NumberPool n where n.numberId = 1 ";
執行後,咦?報錯了
org.hibernate.PropertyNotFoundException: no appropriate constructor in class: com.dkt.entity.NumberPool at org.hibernate.internal.util.ReflectHelper.getConstructor(ReflectHelper.java:369) at org.hibernate.hql.internal.classic.QueryTranslatorImpl.renderSQL(QueryTranslatorImpl.java:653) at org.hibernate.hql.internal.classic.QueryTranslatorImpl.compile(QueryTranslatorImpl.java:245) at org.hibernate.hql.internal.classic.QueryTranslatorImpl.compile(QueryTranslatorImpl.java:211) 。。。。。。
這是因為沒有對應的建構函式。
上面的hql語句中有new NumberPool(n.numberId, n.number)這端程式碼,這端程式碼其實是建立一個新的NumberPool物件,那麼就需要與此相同的一個建構函式。
上面的錯誤就是告訴你,hibernate沒有找到對應的建構函式。
原因找到了那就新增一個吧。
注意,這個建構函式的引數一定要與你hql中想取得的引數一致。
@Entity @Table(name = "number_pool") public class NumberPool { public NumberPool() { } public NumberPool(String numberId, String number) { this.numberId = numberId; this.number = number; } 。。。。。。 }
然後我們再執行,看我們拿到了,這兩個欄位,而其他的引數都是null。