2016-04-20 26 views
0

我得到這個給定異常什麼是正確的JPA查詢來獲取從表中的一些列,而不是所有的表數據

異常在線程「線程2」 java.lang.ClassCastException:[Ljava.lang。目的;不能在java.lang.Thread.run被轉換爲com.freeGo.model.Pump在com.freeGo.util.HealthTask.run(HealthTask.java:33)(Thread.java:745)

我的代碼是:

@Query("SELECT p.id, p.timestamp FROM Pump p WHERE p.isActive = :isActive") 
public List<Pump> findByIsActive(@Param("isActive") int isActive); 

,如果我作爲

public List<Pump> findByIsActive(@Param("isActive") int isActive); 

那麼它的成功運行不使用查詢註釋,但它返回的所有表中的數據,但我想只有2列。

我的項目在spring-3和jpa。

回答

3

查詢沒有問題,如果這就是你想要的。您將從查詢中獲取對象[](對象數組),而不是List<Pump>。因此,請使用返回類型List<Object[]>,並在列0中獲取標識,並在列1中獲取標識。

如果您想使其代碼更好一點,則應該可能會收到查詢以返回自定義DTO。

@Query("SELECT new MyDto(p.id, p.timestamp) FROM Pump p WHERE p.isActive = :isActive") 

,並返回一個List<MyDto>

參考:Spring JPA selecting specific columns

相關問題