【问题标题】:How to select all the data of two columns from a table using JPA query method如何使用JPA查询方法从表中选择两列的所有数据
【发布时间】:2018-04-23 17:14:42
【问题描述】:

我想在我的Repository 接口中添加一个用于以下 SQL 查询的方法:

SELECT ID, NAME  FROM TABLE_NAME

此 SQL 查询按预期工作,但我想将其编写为 JPA 查询方法,我尝试了多种方式但没有成功,请帮助我。

以下是我尝试过但没有奏效的方法:

findAllByIdName(){}
findAllByIdAndName(){}
findByIdName(){}
findByIdAndName(){}

【问题讨论】:

标签: java spring hibernate jpa spring-data-jpa


【解决方案1】:

只需使用基于接口或类的projections

public interface IdAndName {
    Long getId();
    String getName();
}

public interface MyRepo extends CrudRepository<MyEntity, Long> {
    List<IdAndName> findBy();
}

更多info.

【讨论】:

    【解决方案2】:

    先创建一个结果类:

    package com.example;
    
    public class ResultClass{
    
      private Long id;
      private String name;
    
      public ResultCalss(Long id, String name){
         // set
      }
    }
    

    然后使用自定义@Query:

    @Query("select new com.example.ResultClass(e.id, e.name) from MyEntity e")
    public List<ResultClass> findIdsAndNames();
    

    【讨论】:

    • MyEntity 和 ResultClass 一样吗?
    • no.. MyEntity 是一个用@Entity 注释的类。 ResultClass 是一个 POJO
    • 无法在类 [com.example.ResultClass] 上找到适当的构造函数。预期的参数是:int、java.lang.String
    • 在 ResultClass 和 POJO 中,ID 和名称都是 int
    • 你正在使用的构造函数的定义是什么?
    【解决方案3】:

    我有类似的实现。实现这一点需要自定义查询。

    例如 -

    @Query("SELECT usr.id, usr.name FROM User usr")
    public List<User> findIdsAndNames();
    

    而用户类是

    @Entity
    @Table(name="t_user")
    public class User{
    
        @Id
        @GeneratedValue(strategy=GenerationType.IDENTITY)
        @Column(name="id", nullable = false)
        private Long id;
    
        @Column(name="name")
        private String name;
    ............
    }
    

    【讨论】:

      猜你喜欢
      • 2020-07-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-06-21
      • 2019-02-09
      • 1970-01-01
      相关资源
      最近更新 更多