2014-04-17 4 views
5

Ho creato un DAL che utilizza i repository di Spring per gestire le operazioni CRUD su un DB MySQL tramite Hibernate e JPA. In particolare, questa è la mia definizione RepositoryScrivi query tra tabelle con QueryDSL e Spring's Repository

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

} 

Con questa definizione sono in grado di eseguire operazioni CRUD usando QueryDSL predicati attraverso l'estensione dell'interfaccia QueryDslPredicateExecutor e il metodo findAll(Predicate).

Il problema che sto affrontando è che in questo modo non sono in grado di eseguire query su più tabelle. In effetti, non posso usare i servizi di join di QueryDSL perché non ho uno HibernateQuery.

Qual è il modo corretto per implementare l'operazione di join con Spring Repositories e QueryDSL?

Grazie

risposta

2

Risolto.

Questi scrivo i passaggi necessari per eseguire una query QueryDSL con sorgente Repository

  1. Acquisire il EntityManager utilizzato nel contesto applicativo aggiungendo l'attributo EntityManager nella classe Service con la @PersistenceContext nota

    @PersistenceContext

    EntityManager em;

    In questo modo l'attributo em si collegherà al bean EntityManager definito nel contesto dell'applicazione Spring.

  2. un'istanza di un oggetto JPAQuery e utilizzarlo

    QUser qUser = QUser.user;

    JPQLQuery query = new JPAQuery(em);

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

Ora modo possiamo usare l'oggetto JPQLQuery per eseguire join su tavoli diversi.

Spero che questo aiuti