亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Springboot?JPA怎么使用distinct返回對象

發布時間:2022-02-23 13:48:26 來源:億速云 閱讀:699 作者:iii 欄目:開發技術

這篇文章主要講解了“Springboot JPA怎么使用distinct返回對象”,文中的講解內容簡單清晰,易于學習與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學習“Springboot JPA怎么使用distinct返回對象”吧!

JPA如何使用distinct返回對象

package com.frank.jpaBatchSave.repository;
import com.frank.jpaBatchSave.entity.Person;
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.PagingAndSortingRepository;
import org.springframework.stereotype.Repository;
import java.util.List;
 
@Repository
public interface PersonRepository extends PagingAndSortingRepository<Person, Integer> {
 
    @Query("select distinct new Person(p.name, p.province, p.city) from Person p")
    List<Person> getAllPerson();
}

這里如果需要返回的是對象,則需要new Person(p.name, p.province, p.city),同時Person類必須要有三參的構造器。

public Person(String name, String province, String city) {
        this.name = name;
        this.province = province;
        this.city = city;
    }

因為:select distinct name, province, city) from Person p 這樣寫的話返回的是Object[]數組。所以需要使用上面的方式。

JPA自定義返回對象

任何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<aaDto> getList();

方法二

方法一這種寫法還是非常不靈活,有時候寫一些函數什么的,估計會搞死,還是得寫原生的sql才行。我說的查詢字段屬于多個表。如果只查詢一個表字段,關聯查詢只是條件,可以直接返回對應的實體也是沒問題的。

List<Map<String, Object>>
@Query(value = "SELECT a.aa,b.bb from a LEFT JOIN b a.id=b.id", nativeQuery = true)
List<Map<String, String>> getFundAccountList();

這樣返回的數據就是一個集合,是鍵值型的,如果我們實在想用對象,不用Map,我是先把返回參數序列化成json,然后將這個json再反序列化成我們想要的對象即可。

方法三

在繼承jpa接口的時候,里面的實體類寫你的對應結果類,就可以用相應的結果來接收了。

public interface xxxDTORepository extends JpaRepository<xxxDTO, Long>

方法四

以上的方法都是基于繼承JpaRepository接口來實現,其實又另外一種更加靈活的方式,這種方式可以更加靈活的寫sql和定義返回對象。

@PersistenceContext
private EntityManager entityManager;

記錄一個錯誤:Path expected for join!

Caused by: org.hibernate.hql.internal.ast.QuerySyntaxException: Path expected for join!

就這么個錯誤,其實很簡單,只是我沒有細看錯誤信息,導致在正確的語句找錯誤,找不到。出現這個錯誤,后面會跟你寫的hql語句,注意留意這個hql語句,仔細檢查,他一定是有錯誤的。

Springboot?JPA怎么使用distinct返回對象

有個博客說需要添加映射關系,其實完全不用的,就是一對多,A類里面包含List<B> 是不需要這樣的,獨立類沒任何關聯也是可以的,細心細心細心。。。

順帶再來記錄一個問題吧,這個問題簡單,出現下面這段代碼,后面會跟一些信息,根據信息就可以知道是返回對象的構造函數類型問題,既然這樣,那就調整下返回實體對象的屬性類型即可。

Caused by: org.hibernate.hql.internal.ast.QuerySyntaxException: Unable to locate appropriate constructor on class

感謝各位的閱讀,以上就是“Springboot JPA怎么使用distinct返回對象”的內容了,經過本文的學習后,相信大家對Springboot JPA怎么使用distinct返回對象這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是億速云,小編將為大家推送更多相關知識點的文章,歡迎關注!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

邹城市| 奇台县| 泾川县| 梁河县| 台前县| 新巴尔虎右旗| 油尖旺区| 台东市| 大丰市| 诸暨市| 松原市| 临江市| 平谷区| 富源县| 图们市| 霍林郭勒市| 遂溪县| 静乐县| 桐柏县| 原平市| 边坝县| 确山县| 斗六市| 同江市| 濮阳县| 秦皇岛市| 延安市| 舒城县| 昌都县| 壶关县| 合肥市| 炉霍县| 佛山市| 攀枝花市| 峨眉山市| 湾仔区| 会理县| 新邵县| 涿鹿县| 庆城县| 泸州市|