返回顶部
首页 > 资讯 > 后端开发 > Python >Springboot JPA如何使用distinct返回对象
  • 699
分享到

Springboot JPA如何使用distinct返回对象

2024-04-02 19:04:59 699人浏览 八月长安

Python 官方文档:入门教程 => 点击学习

摘要

目录JPA如何使用distinct返回对象JPA自定义返回对象方法一方法二方法三方法四JPA如何使用distinct返回对象 package com.frank.jpaBatchSa

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语句,仔细检查,他一定是有错误的。

有个博客说需要添加映射关系,其实完全不用的,就是一对多,A类里面包含List<B> 是不需要这样的,独立类没任何关联也是可以的,细心细心细心。。。

顺带再来记录一个问题吧,这个问题简单,出现下面这段代码,后面会跟一些信息,根据信息就可以知道是返回对象的构造函数类型问题,既然这样,那就调整下返回实体对象的属性类型即可。

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

以上为个人经验,希望能给大家一个参考,也希望大家多多支持编程网。

--结束END--

本文标题: Springboot JPA如何使用distinct返回对象

本文链接: https://lsjlt.com/news/140200.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • Springboot JPA如何使用distinct返回对象
    目录JPA如何使用distinct返回对象JPA自定义返回对象方法一方法二方法三方法四JPA如何使用distinct返回对象 package com.frank.jpaBatchSa...
    99+
    2024-04-02
  • Springboot JPA怎么使用distinct返回对象
    这篇文章主要讲解了“Springboot JPA怎么使用distinct返回对象”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Springboot JPA怎么使用dist...
    99+
    2023-06-29
  • SpringBoot返回Json对象报错(返回对象为空{})
    目录1 需求描述2 代码展示3 原因分析4 解决方案5 效果展示6 结束语1 需求描述 我们现在要干一个什么事情呢,我们要在浏览器输入一个请求地址,然后我们的后端就给我返回一个Use...
    99+
    2024-04-02
  • Springboot jpa使用sum()函数返回结果如何被接收
    目录jpa使用sum()返回结果如何接收1、需求2、解决方法一3、解决方法二jpa使用count函数和sum函数方法一方法二方法三jpa使用sum()返回结果如何接收 1、需求 我的...
    99+
    2024-04-02
  • PHP 函数如何返回对象?
    php 函数可以通过使用 return 语句后跟对象实例来返回对象,从而将数据封装到自定义结构中。语法:function get_object(): object {}。这允许创建具有自...
    99+
    2024-04-10
    php 对象
  • SpringBoot返回Json对象报错怎么办
    小编给大家分享一下SpringBoot返回Json对象报错怎么办,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!1 需求描述我们现在要干一个什么事情呢,我们要在浏览...
    99+
    2023-06-28
  • SpringBoot返回对象时,如何将Long类型转换为String
    目录SpringBoot返回对象将Long类型转换为String1.自定义ObjectMapper2.把MappingJackson2HttpMessageConverter3.定义...
    99+
    2024-04-02
  • springboot jpa之返回表中部分字段如何处理
    这篇文章主要介绍springboot jpa之返回表中部分字段如何处理,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!springboot jpa返回表中部分字段使用springboot jpa操作数据库可以...
    99+
    2023-06-22
  • springboot jpa如何实现返回结果自定义查询
    这篇文章主要讲解了“springboot jpa如何实现返回结果自定义查询”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“springboot jpa如何实现返回结果自定义...
    99+
    2023-06-29
  • 让JPA的Query查询接口返回Map对象的方法
    在JPA 2.0 中我们可以使用entityManager.createNativeQuery()来执行原生的SQL语句。 但当我们查询结果没有对应实体类时,query.getResultList()返回的是一个List<Object...
    99+
    2023-05-30
  • Spring Data Jpa返回自定义对象的3种方法实例
    目录方法一、简单查询直接new对象方法二、Service层使用EntityManager方法三、Dao层使用Map接收自定义对象总结tasks表对应的Entity @Entity @...
    99+
    2024-04-02
  • JPA如何使用entityManager执行SQL并指定返回类型
    下面是代码 Query query = entityManager.createNativeQuery(yourSql); //指定返回类型 query.unwrap(SQLQu...
    99+
    2024-04-02
  • 如何使用JPA自定义VO接收返回结果集
    这篇文章主要介绍如何使用JPA自定义VO接收返回结果集,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!JPA自定义VO接收返回结果集(unwrap)JPA跟mybitis比较,简单的业务搜索是方便的,但是设计到复杂的S...
    99+
    2023-06-25
  • JavaScript中如何以this的值返回window对象
    今天小编给大家分享一下JavaScript中如何以this的值返回window对象的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章...
    99+
    2024-04-02
  • 如何解决axios返回空对象的问题
    这篇文章主要介绍如何解决axios返回空对象的问题,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!问题描述:使用 axios 请求数据的时候,已经请求成功,返回的参数也正确。但打印出来...
    99+
    2024-04-02
  • python函数如何返回一个对象类型
    python使用range函数返回对象类型,具体方法如下:range函数语法:range(start, stop[, step])range函数使用方法:print(range(10))range(0,10)...
    99+
    2024-04-02
  • SpringBoot JPA常用注解如何使用
    这篇文章主要讲解了“SpringBoot JPA常用注解如何使用”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“SpringBoot JPA常用注解如何使用”吧!1. 简介...
    99+
    2023-07-05
  • springboot如何返回html和jsp
    这篇文章主要介绍springboot如何返回html和jsp,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!springboot是什么springboot一种全新的编程规范,其设计目的是用来简化新Spring应用的初始...
    99+
    2023-06-14
  • SpringBoot如何使用ApplicationContext获取bean对象
    目录使用ApplicationContext获取bean对象SpringBoot Bean注入的深入研究下面代码可正常运行下面代码不能正常运行比较解决方案应用使用Applicatio...
    99+
    2024-04-02
  • 如何实现存储过程返回数组对象
    本篇内容主要讲解“如何实现存储过程返回数组对象”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“如何实现存储过程返回数组对象”吧! 其...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作