【发布时间】:2021-04-26 19:35:38
【问题描述】:
拥有以下实体
class Parent {
@Id
Long id;
String name;
@OneToMany
@JoinColumn(name="parent_fk")
List<Child> children;
}
class Child {
@Id
Long id;
String sex; //male, female
String name;
}
您将如何使用 CriteriaBuilder 构造以下查询?
SELECT * FROM Parent p JOIN Child c ON p.id = c.parent_fk WHERE c.sex='male' AND (c.name = 'Tom' OR c.name='Jim')
谢谢
更新: 所以我的错误是,而不是这样做
Join<Parent, Child> c = p.join("children");
Predicate predicate = builder.or(
builder.equal( c.get("name"), name1 ),
builder.equal( c.get("name"), name2 )
);
我在做:
Predicate predicate = builder.or(
builder.equal( p.join("children").get("name"), name1 ),
builder.equal( p.join("children").get("name"), name2 )
);
这导致了与子表的 2 个内部连接,每个 p.join 我正在使用一个
【问题讨论】:
标签: hibernate jpa spring-data-jpa criteria-api