使用QueryDSL和Spring的存储库编写跨表查询

时间:2014-04-17 17:28:35

标签: java spring spring-data querydsl

我构建了一个DAL,它使用Spring的存储库通过Hibernate和JPA管理MySQL DB上的CRUD操作。特别是这是我的存储库定义

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

}

使用此定义,我可以使用QueryDSL Predicates执行CRUD操作 通过扩展QueryDslPredicateExecutor接口和findAll(Predicate)方法。

我面临的问题是,这种方式我无法进行跨表查询。实际上,我不能使用QueryDSL的连接工具,因为我没有HibernateQuery

使用Spring Repositories和QueryDSL实现连接操作的正确方法是什么?

谢谢

1 个答案:

答案 0 :(得分:2)

解决。

下面我将编写使用Spring Repositories执行QueryDSL查询所需的步骤

  1. 通过在EntityManager类中添加EntityManager注释}来获取应用程序上下文中使用的Service

    @PersistenceContext

    @PersistenceContext

    这样,em属性将链接到EntityManager em; bean 在Spring应用程序上下文中定义。

  2. 实例化JPAQuery对象并使用它

    EntityManager

    QUser qUser = QUser.user;

    JPQLQuery query = new JPAQuery(em);

  3. 现在我们可以使用JPQLQuery对象在不同的​​表上执行连接。

    希望这有帮助