2017-07-29 58 views
0

我呼籲實體的查詢方法的列表,並將其返回Object[]而不是List<EntityName>我不知道爲什麼。自定義查詢方法返回一個Object [],而不是實體

我有一個實體的默認構造函數,getters和setters。獲得者用@Column(name="field name")標註。

現在我已經和CRUD存儲庫這樣的:

@Transactional 
public interface MyCrudRepo extends BaseCrudRepo <EntityClassName> { 
    @Query("SELECT field1,field2,id FROM EntityClassName WHERE field1 = :param1 AND field2 = :param2") 
     List<EntityClassName> queryMethod(
     @Param("param1") String param1, 
     @Param("param2") String param2, Pageable page); 

所以我試圖讓List<EntityClassName>當我打電話的方法,但它返回一個Object[]我不知道該怎麼辦。

我也試過:

@Query("SELECT ec FROM EntityClassName ec WHERE field1 = :param1 AND field2 = :param2") 

,但我得到的查詢驗證異常

當我調用findAll()方法上MyCrudRepo比如,它返回一個List<EntityClassName>像預期

這可能是因爲我在EntityClassName類中沒有構造函數?

回答

1

它看起來像你的第二個查詢是«非常正確»,但要訪問實例的字段,實例名稱(ec)被錯過。因此,請考慮使用以下定義:

public interface MyCrudRepo extends BaseCrudRepo<EntityClassName> { 
    @Query(
     "SELECT ec FROM EntityClassName ec " + 
     "WHERE ec.field1 = :param1 AND ec.field2 = :param2") 
    List<EntityClassName> queryMethod(
     @Param("param1") String param1, 
     @Param("param2") String param2, 
     Pageable page 
    ); 
} 

實體類

難道是因爲我在EntityClassName類沒有構造的無參數的構造函數?

實體類必須有一個無參數的構造:

必須有根據JPA 2.1規範(JSR 338: Java™ Persistence 2.1, Final Release),23頁是一個無參數的構造。實體類也可以有其他構造函數。無參數構造函數必須是公共的或受保護的。

相關問題