1. 程式人生 > >Hibernate如何只取出需要的欄位

Hibernate如何只取出需要的欄位

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。