jpa 自定義返回物件
阿新 • • 發佈:2019-03-26
任何ORM框架都少不了開放自定義sql的問題。jpa自然也不例外,很多場景需要寫複雜sql的。
首先定義一個方法簽名,然後打上@Query註解。像下面這樣,需要注意nativeQuery,這個表示query中的字元以原始的sql語句執行,也就是不做任何調整。你寫啥,就執行啥sql語句。但是想返回自定義的實體,Sorry,做不到。的用另一種方式。
@Query(value = "SELECT * from table where id= :id", nativeQuery = true) List<aa> getByaaId(@Param("id") BigInteger id);
下面這個就是實現自定義的實體方法。首先需要定義個實體,這個實體必須包含無參和全參建構函式。然後去掉nativeQuery,同時還有一點必須注意,寫的語句裡面不是資料庫中對應的實際表名,而是你定義的實體對映。比如下面的table1和table2,其實都是你定義的實體類的名字,不是你的資料庫表名,是你程式碼中對映資料表的實體類名。
@Data @NoArgsConstructor @AllArgsConstructor public class aaDto { private String aa; private String bb; private String cc; }
@Query(value = "SELECT new com.xxx.xxx.dto.aaDto" + "(i.aa,i.bb,i.cc)" + "FROM table1 i JOIN table2 e on i.id=e.id") List<a