【问题标题】:Write cross-table queries with QueryDSL and Spring's Repository使用 QueryDSL 和 Spring 的存储库编写跨表查询
【发布时间】:2014-06-02 02:38:35
【问题描述】:

我已经构建了一个 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 谓词执行 CRUD 操作 通过QueryDslPredicateExecutor接口和findAll(Predicate)方法的扩展。

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

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

谢谢

【问题讨论】:

    标签: java spring spring-data querydsl


    【解决方案1】:

    解决了。

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

    1. 通过在带有@PersistenceContext注解的Service类中添加EntityManager属性来获取应用程序上下文中使用的EntityManager

      @PersistenceContext
      EntityManager em;
      

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

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

      QUser qUser = QUser.user;
      JPQLQuery query = new JPAQuery(em);
      User charlie = query
          .from(qUser)
          .where(qUser.username.eq("charlie"))
          .uniqueResult(qUser);
      

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

    希望对你有帮助

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-09-22
      • 1970-01-01
      • 2014-08-01
      • 1970-01-01
      • 2019-07-17
      • 2019-01-15
      • 1970-01-01
      • 2017-07-18
      相关资源
      最近更新 更多