hibernate - QueryDsl 交叉联接返回零个元素

标签 hibernate querydsl

你好,我在 querydsl(+hibernate 4.2.3 和 postgresql)中遇到了一点困难。一般来说,它工作得很好,但是我有一个像这样构建的谓词:

QUser user = QUser.user;
....
predicate = and(predicate,
                user.userType.in(userTypes)
                .or(user.customer.userType.in(userTypes)));

现在的问题是用户并不总是有客户。 Querydsl 生成带有与客户表交叉连接的 sql,并且当用户没有客户时,此查询返回零条目,即使应该返回这些条目。该客户已离开连接(稍微修改了 spring 数据以允许连接获取字段),但仍然创建了额外的交叉连接。有什么想法如何编写这样的查询吗?

最佳答案

我希望 user.customer 遍历创建额外的联接。

以下查询应该有效

query.from(user)
     .leftJoin(user.customer, customer)
     .where(user.userType.in(userTypes).or(customer.userType.in(userTypes)));

关于hibernate - QueryDsl 交叉联接返回零个元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18190858/

相关文章:

javax.persistence.TransactionRequiredException : No EntityManager with actual transaction available for current thread

java - Select 和 Create_If_Not_Available 与始终在具有唯一约束的表上创建

mysql - QueryDSL 和日期差异

java - querydsl-jpa动态查询

mongodb - 使用Gradle为Spring Data和MongoDB配置QueryDSL

java - JPA(Hibernate 支持)Maker-Checker 多级继承

java - 无法保存鉴别器值。 (JPA Spring 数据+ hibernate )

java - 字符串映射不能处理超过 varchar(255)

jdbctemplate - 无法在 QueryDslJdbcTemplate 上调用 list() 方法

java - QueryDSL:QueryDSL 2.9.0 中 ConstructorExpression 和 CaseBuilder 的 JPA 示例