2014-04-17 10 views
5

Zbudowałem DAL, który używa repozytoriów Spring do zarządzania operacjami CRUD na MySQL DB przez Hibernate i JPA. W szczególności jest to mój Repository definicjaZapisywanie zapytań między tabelami za pomocą QueryDSL i repozytorium sprężyn

package my.dal.repository; 

import my.domain.dal.User; 

import org.springframework.data.querydsl.QueryDslPredicateExecutor; 
import org.springframework.data.repository.CrudRepository; 
import org.springframework.stereotype.Repository; 


@Repository 
public interface IUserRepository extends CrudRepository<User, String>, QueryDslPredicateExecutor<User>{ 

} 

Z tej definicji jestem w stanie wykonywać operacje CRUD za pomocą QueryDSL predykaty poprzez rozszerzenie interfejsu QueryDslPredicateExecutor i sposobu findAll(Predicate).

Problem, który napotykam, polega na tym, że nie jestem w stanie tworzyć zapytań między tabelami. Rzeczywiście, nie mogę używać urządzeń łączących QueryDSL, ponieważ nie mam HibernateQuery.

Jaki jest właściwy sposób wdrożenia operacji łączenia z repozytoriami sprężynowymi i QueryDSL?

Dziękujemy

Odpowiedz

2

rozwiązany.

Poniżej piszę kroki niezbędne do wykonania kwerendy QueryDSL ze sprężyną repozytoriów

  1. nabyć EntityManager używane w kontekście aplikacji dodając atrybut EntityManager w klasie Service z @PersistenceContext adnotacji

    @PersistenceContext

    EntityManager em;

    W ten sposób atrybut em zostanie powiązany z EntityManager komponentem fasoli zdefiniowanym w kontekście aplikacji Spring.

  2. Utworzenie wystąpienia JPAQuery obiekt i użyć go

    QUser qUser = QUser.user;

    JPQLQuery query = new JPAQuery(em);

    User charlie = query.from(qUser).where(qUser.username.eq("charlie")).uniqueResult(qUser);

Teraz sposób możemy użyć obiektu JPQLQuery wykonanie przyłącza na różnych stołach.

Mam nadzieję, że to pomoże

Powiązane problemy