java - 根据子实体的属性值搜索实体的 JPA 标准? (重复连接)

标签 java hibernate jpa criteria

我有以下查询,它根据标签(子)值正确返回标签(父/根实体),但是,它在响应中复制父实体 17 次(因为它有 17 个标签) 。你知道我在这里做错了什么吗?

builder.and(
  builder.equal(root.join("labels").join("labelIdentity").get("key"), "owner"),
  builder.like(root.join("labels").get("value"), "bob")
);

更新

我已经根据 https://issues.apache.org/jira/browse/OPENJPA-2333 尝试了以下操作,但这仍然返回 17 个重复结果,而实际上只应返回一个结果:

final Join labels = root.join("labels", JoinType.INNER);
final Join labelIdentities = labels.join("labelIdentity", JoinType.INNER);

builder.and(
  builder.equal(labelIdentities.get("key"), "owner"),
  builder.like(labels.get("value"), "bob")
);

我相信使用 query.distinct(true) 将消除重复项,并且基于此接受的答案,似乎是推荐的方法:https://stackoverflow.com/a/11257160/12177456

最佳答案

看来问题可能出在 JPA 的运行方式上。这是一个可能有帮助的页面:https://issues.apache.org/jira/browse/OPENJPA-2333

(我会发表评论,但没有足够的声誉点...)

关于java - 根据子实体的属性值搜索实体的 JPA 标准? (重复连接),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60603514/

相关文章:

java - 使用java play 2框架和spring data jpa自动生成数据库表

java - 当在 Hibernate 5 中将实体映射到 @Query 内的 Dto 时,它会抛出错误 Count queryvalidation failed for method

java - 为什么不从实体层次结构来创建 dto?

java - Azure Java函数-502-错误网关

java - Android:错误:找不到符号包。add(new MyAppPackage())

java - Spring存储过程传递数组

java - 检测 Java 字符串正则表达式中的空格

java - Hibernate:saveOrUpdateAll 和事务

Java - 用于保留的分布式 JPA 锁

java - 是否可以在没有服务器的情况下使用实体类和EntityManager?