![](/img/trans.png)
[英]How to return a custom object from a Spring Data JPA GROUP BY query
[英]Return custom object from Spring Data with Native Query
我的問題是基於另一篇文章。 如何使用本機查詢實現相同的目的? 本機查詢不允許 JPQL,因此也不允許新實例。
我的波喬。
class Coordinates {
private final BigDecimal latitude
private final BigDecimal longitude
...
}
我的數據庫表包含城市周邊的坐標,因此有三列:city_name、latitude、longitude。 每個城市都包含很多(實際上,很多)周界坐標,這些坐標將用於在 Google 地圖中構建陰影區域。
我打算在該表上構建一個簡單的本機查詢,該查詢應返回一個坐標列表。
在另一篇文章中找到了答案。 基本上我用SqlResultSetMapping
沿ConstructorResult
(沒有其他辦法解決)有特別注意上提后的接受的答案評論:您需要將添加@NamedNativeQuery
注解所使用的實體interface
且在前面加上實體的名稱用一個.
否則它將無法工作。
例:
@Entity
@Table(name = "grupo_setorial")
@SqlResultSetMapping(
name = "mapeamentoDeQuadrantes",
classes = {
@ConstructorResult(
targetClass = Coordenada.class,
columns = {
@ColumnResult(name = "latitude"),
@ColumnResult(name = "longitude")
}
)
}
)
@NamedNativeQuery(
name = "GrupoCensitario.obterPerimetroDosSetores",
query = "SELECT latitude as latitude, longitude as longitude FROM coordenadas where id_setor IN (:setores)",
resultSetMapping = "mapeamentoDeQuadrantes"
)
public class GrupoCensitario {
這是https://jira.spring.io/browse/DATAJPA-980 , 這是一個演示該問題的項目。
@Query(value = "SELECT name AS name, age AS age FROM Person", nativeQuery = true)
List<PersonSummary> findAllProjectedNativeQuery();
它是在Hibernate 5.2.11附帶的Spring Data JPA 2.0 GA(Kay)版本中修復的。
對於Spring Data 1.10.12(Ingalls)和1.11.8(Hopper),問題也是固定的,但需要在Hibernate 5.2.11上運行才能工作。
您將不得不使用sql結果集映射 ,它是JPA的一部分。
如果您使用的是最新版本的spring-data
並且還使用了Repositories
,我個人認為來自Itsallas的答案可以找到正確的解決方案。
我實際上現在還沒有關於(Spring Data) Projections
,並且需要一點時間來理解他在他的例子中展示的內容。
因此,我只想添加一個指向Spring Data JPA - Reference Documentation
的鏈接Spring Data JPA - Reference Documentation
,看一下Projections章節 。
Spring Data查詢方法通常返回由存儲庫管理的聚合根的一個或多個實例。 但是,有時可能需要根據這些類型的某些屬性創建投影。 Spring Data允許建模專用返回類型,以更有選擇地檢索托管聚合的部分視圖。
我找到了答案:
public interface UserEventRepository extends JpaRepository<UserEvent, Long> {
List<UserEvent> findAllByUserId(Long userId);
@Query(value = "SELECT user_id FROM user_event ue " +
"WHERE ue.user_id = :userId", nativeQuery = true)
List<Long> findUserIdByEventId(@Param("userId") Long userId);
}
這樣我們返回列表的長列表ID。 這里的關鍵是我們將nativeQuery屬性設置為true。 值本身就是我們想要執行的查詢。
我希望有所幫助。 這似乎是一個明確的解決方
預測解決方案是最好的。 (通過id查詢只是一個例子,你可以直接使用extends CRUD操作)
只需添加接口作為對查詢的響應
示例存儲庫:
@Query(select * from tableA where tableA = :id)
DisplayLangLongI findTableAbyId(@Param(value = "id") Long id)
示例接口 (DisplayLangLongI.java)
public interface DisplayLangLongI () {
BigDecimal getLatitude();
BigDecimal getLongitude();
...... (you can add more)
}
在界面中,您可以 select 顯示哪個參數/對象
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.