【问题标题】:Write custom SQL query using JPA使用 JPA 编写自定义 SQL 查询
【发布时间】:2021-02-14 07:02:45
【问题描述】:

我有一个 DB 实体的 JPA 存储库,如下所示:

@Repository
public interface StudentRepository
    extends  JpaRepository<Student, String>  {
}

Student实体如下:

@Entity
@Table(name = "student")
public class Student implements Serializable {

  private static final long serialVersionUID = 1L;

  @Id
  @GeneratedValue(generator = "custom-uuid")
  @GenericGenerator(name = "custom-uuid",
      strategy = "generator.CustomUUIDGenerator")
  private String id;

  @Column(name = "roll_number")
  private String rollNumber;

  @Column(name = "name")
  private String name;

  @LastModifiedDate
  @Column(name = "last_modified_date")
  @JsonIgnore
  private Instant lastModifiedDate = Instant.now();

现在,我想使用 JPA 编写以下 SQL 查询,如下所示:

SELECT id, roll_number from  student where id=<id> order by last_modified_date desc;

作为 JPA/Hibernate 的新手,我不知道如何使用 JPA/Hibernate 来实现这一点。

有人可以帮忙吗?

【问题讨论】:

    标签: java sql spring-boot hibernate jpa


    【解决方案1】:

    你可以这样写:

    String hql = "SELECT s.id, s.rollNumber FROM Student s WHERE s.id = :id ORDER BY s.lastModifiedDate DESC";
    query.setParameter("id", 10);
    Query query = session.createQuery(hql);
    List results = query.list();
    

    参考:https://www.tutorialspoint.com/jpa/jpa_jpql.htm

    【讨论】:

      【解决方案2】:

      在存储库中创建一个新方法

      @Repository
      public interface StudentRepository extends JpaRepository<Student, String> {
      
          /**
           * List all student by criterias.
           *
           * @return
           */
          @Query(value = "SELECT id, roll_number from student where id=?1 order by last_modified_date desc;", nativeQuery = true)
          List<Student> listStudent(String id);
      
      }
      

      参考文档:https://docs.spring.io/spring-data/jpa/docs/current/reference/html/#jpa.query-methods.at-query

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-03-10
        • 1970-01-01
        • 2016-04-16
        • 1970-01-01
        • 1970-01-01
        • 2018-10-24
        • 2021-05-01
        • 1970-01-01
        相关资源
        最近更新 更多