2014-04-17 1 views
5

Hibernate와 JPA를 통해 MySQL DB에서 CRUD 작업을 관리하기 위해 Spring의 저장소를 사용하는 DAL을 작성했습니다. 특히이 내 저장소 정의 나는 QueryDslPredicateExecutor 인터페이스의 확장과 findAll(Predicate) 방법으로 QueryDSL 술어 를 사용하여 CRUD 작업을 실행할 수있어이 정의와QueryDSL과 Spring의 저장소를 사용하여 크로스 테이블 쿼리를 작성하십시오.

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>{ 

} 

입니다.

내가 직면 한 문제는 크로스 테이블 쿼리를 만들 수 없다는 것입니다. 실제로 HibernateQuery이 없기 때문에 QueryDSL의 조인 기능을 사용할 수 없습니다.

Spring 리포지토리와 QueryDSL을 사용하여 조인 작업을 구현하는 올바른 방법은 무엇입니까?

감사합니다.

답변

2

해결되었습니다.

나는 봄 저장소와 QueryDSL 쿼리를 실행하는 데 필요한 단계를 쓰기 아래

  1. 획득 @PersistenceContext 주석

    으로 Service 클래스의 EntityManager 속성을 추가하여 응용 프로그램 컨텍스트에서 사용되는 EntityManager@PersistenceContext

    EntityManager em;

    이렇게하면 em 속성은 Spring 애플리케이션 컨텍스트에 정의 된 bean 으로 링크됩니다.

  2. JPAQuery 객체를 인스턴스화하고 다른 테이블을 통해 조인이

    QUser qUser = QUser.user;

    JPQLQuery query = new JPAQuery(em);

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

이제 방법은 우리가 실행하기 위해 JPQLQuery 객체를 사용할 수 있습니다 사용합니다.

희망이 도움이되었습니다.