mysql - 带连接的 spring data jpa native 查询

标签 mysql hibernate jpa spring-data spring-data-jpa

如何在 spring data jpa 中执行原生查询,同时获取子实体?如果我在子实体对象上有 Eager FetchType,则 spring 数据正在执行 2 个查询。 1 个用于父实体,1 个用于子实体。

有没有办法只执行 1 个 native 查询来获取父实体和子实体?

parent :

@Entity
public class Parent {
   @Id
   @GeneratedValue(strategy = GenerationType.IDENTITY)
   private long id;

   @Temporal(TemporalType.TIMESTAMP)
   private Date ts;

   @ManyToOne(fetch=FetchType.LAZY)
   private Child child;
}

child :

@Entity
public class Child {
   @Id
   @GeneratedValue(strategy = GenerationType.IDENTITY)
   private long id;

   @OneToMany(fetch=FetchType.LAZY, mappedBy="parent")
   private Parent parent;
}

查询:

public interface ParentRepository extends Repository<Parent, Integer> {
    @Query(value = "SELECT * from parents p inner join children c on c.id=p.childId where TIMESTAMPDIFF(SECOND, p.ts, CURRENT_TIMESTAMP) < :interval", nativeQuery = true)
    Parent findOneByInterval(@Param("interval") long interval);
}

我正在使用 Hibernate 5、MySQL 以及 Spring Data JPA。

我还尝试将 @NamedEntityGraph 添加到父类,将 @EntityGraph 添加到查询方法,但没有成功。

最佳答案

如果你想要父对象,你可以这样尝试

public interface ParentRepository extends Repository<Parent, Integer> {

    @Query(value = "SELECT p.* from parents p inner join children c on c.id=p.childId where TIMESTAMPDIFF(SECOND, p.ts, CURRENT_TIMESTAMP) < :interval", nativeQuery = true)
    Parent findOneByInterval(@Param("interval") long interval);
}

(或) Spring data JPA 将为原生 Query 返回对象数组 所以,

public interface ParentRepository extends Repository<Parent, Integer> {

    @Query(value = "SELECT * from parents p inner join children c on c.id=p.childId where TIMESTAMPDIFF(SECOND, p.ts, CURRENT_TIMESTAMP) < :interval", nativeQuery = true)
    List<Object[]> findOneByInterval(@Param("interval") long interval);
}

关于mysql - 带连接的 spring data jpa native 查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41007235/

相关文章:

mysql - 选择两组数据单独分组

php - MySQL 触发器每次更新都会添加两行

javascript - 以特定格式将 mysql 数据检索到 javascript 时出现问题

java - 带有遗留映射表的 Hibernate Annotation

java - 无法使用 hibernate 5.0 将 List<String> 插入到 postgres 9.4 表中,其中要插入的列的类型为字符 varying[]

hibernate - Spring Data JPA @EntityListeners w/@Transient @PostLoad,属性未更新

java - 使用 Java EE 保留我的第一个实体

php - 如何使用 GROUP mysql bind_param 计算行数?

java - 将 SQLquery 映射到普通对象,而不是实体

java - 在 hibernate 中一对多单向添加更多对象到现有列表中