JPA 查询部分字段

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JPA 查询部分字段相关的知识,希望对你有一定的参考价值。

参考技术A JPA默认得查询会把表里所有数据字段都返回
这样会带来一些问题
1.数据量大的字段会导致mysql I/O问题
2.一些敏感的信息我们不应该直接返回给用户,这样的话我们查出来数据后还得手动过滤一遍

但是JPA在这方面并没有支持得很好,而mybatis可以利用resultMap,resultType
那么JPA里面要怎么做呢
一种是利用jpa的@Query

当然我们首先要创建要返回数据的DTO对象
然后使用HQL语句封装。
不我们可以看看JPA生成的sql

第二种是利用entityManager

生成的sql

如何编写基于作为父实体spring数据jpa的一部分的字段对结果进行排序的查询方法

在Spring数据JPA中,我们可以编写查询方法来执行查询。我有两个实体

class A 
    @Id
    @Column
    private String id;

    private String name;

    @ManyToOne
    @JoinColumn(name = "b_field")
    private B b;


class B 
    @Id
    @KeyField
    @Column
    private String id; 

    private String b_field

我想编写一个查询方法“findByNameOrderByb_field”,即查找所有具有所提供名称的行,并根据B类字段(即b_field)对结果进行排序。写上面的函数不会返回有序的结果。有什么办法可以在spring boot中编写这个orderby方法。

public interface ARepository extends CrudRepository<A, String> 

    List<A> findByNameOrderByb_field(String name);

上述函数不会根据B的b_field返回有序结果。

答案

要访问B的属性,必须在查询方法的声明中包含B的字段名称。

public interface ARepository extends CrudRepository<A, String> 

    List<A> findByNameOrderByb_b_field(String name);

有关SpringData如何解析嵌套属性的更多信息,请参见:

Query Property Expressions

以上是关于JPA 查询部分字段的主要内容,如果未能解决你的问题,请参考以下文章

带有嵌入式类型查询的 Mongo/DataNucleus/JPA 给出:找不到(部分)的类型...因为符号没有类型;隐式变量?

使用 JPA 的 Criteria API 按日期间隔分组

jpa自定义条件分页查询

ES Query DSL

JPA 支持查询 Postgres JSON 字段

如何使用查询设置字段的年份部分