【发布时间】:2021-01-28 17:32:30
【问题描述】:
我有 User 和 Address 实体(实际上是其他实体,只是为了简化)。
@Entity
public class User {
@Id
@GeneratedValue
protected long id;
...
@ElementCollection
@CollectionTable(name = "address",
joinColumns = {@JoinColumn(name = "user_id")})
@Column(name = "street")
private List<Address> addresses;
...
}
@Embeddable
public class Address {
private String street;
...
}
如何对Address 进行嵌套查询并在IN 子句中使用它?我期望的结果查询`select * from user u where u.id in (select user_id from address where street like '%Green%');
Root<User> root = ...; // Root query already exists
CriteriaQuery<Address> cq = builder.createQuery(Address.class);
Root<Address> addressRoot = cq.from(Address.class);
cq.select(addressRoot.get("user_id"))
.where(
builder.like(
addressRoot.get("street"),
"%Green%"
)
);
Predicate .... = criteriaQuery.where(root.get("id").in(cq))
我尝试过类似的方法,但它不起作用 - Address 它不是实体,我无法用它创建 CriteriaQuery。
重要提示:我不能使用root.join("addresses").get("street").like(...) 有几个原因
【问题讨论】:
标签: java hibernate hibernate-criteria