2016-12-07 5 views
0

Как выполнить собственный запрос в данных весны jpa, выбирая дочерние сущности одновременно? Если у меня есть Eager FetchType на объекте дочернего объекта, весенние данные выполняют 2 запроса. 1 для родителя и 1 для дочерних объектов.spring data jpa native query with join

Есть ли способ выполнить только 1 собственный запрос, чтобы получить родительские и дочерние сущности?

Родитель:

@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; 
} 

ребенок:

@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); 
} 

Я использую спящий режим 5 и MySQL вместе с JPA весной данных.

Я также попытался добавить @NamedEntityGraph к классу Parent и @EntityGraph к методу запроса не повезло

+0

весны оленьей кожи выполнить любые запросы, ваш провайдер JPA делает. –

+0

@NeilStockton вправо, но есть ли весна или спящий режим для отображения сущности? – rodney757

ответ

0

Если и хотят, родительский объект, и можно попробовать, как этот

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); 
} 

(или) JPA Spring данных возвращает массив объектов для нативного Querys Итак,

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); 
} 
+0

Первый вариант не работает для меня. :( –

Смежные вопросы