【发布时间】:2018-12-28 16:52:21
【问题描述】:
我有一个实体 (Person),它是另一个实体 (User) 的 OneToOne。我需要使用 CriteriaQuery 查找与 User.name 匹配的所有 Person 实体。
我可以对 Person 的直接属性做简单的 CriteriaQuery 就好了:
builder.like(builder.lower(root.get(column)), "%" + pattern.toLowerCase() + "%")
在这种更复杂的情况下,我对如何进行 CriteriaQuery 查询有点迷茫。从我在这里和其他地方的搜索来看,我认为我必须使用某种 Join,但我无法理解它。
@Entity()
public class Person extends ModelCore {
@Basic()
private String iD = null;
@OneToOne(cascade = { CascadeType.ALL })
@JoinColumns({ @JoinColumn(name = "T_User") })
private User user = null;
}
@Entity()
public class User extends ModelCore {
@Basic()
private String iD = null;
@Basic()
private String name = null;
}
@Entity()
public class ModelCore{
@Basic()
private Long dbID = null;
}
已解决
Nikos 的解决方案效果很好(谢谢!):
String username = ... // the criterion
EntityManager em = ...
CriteriaBuilder cb = em.getCriteriaBuilder();
CriteriaQuery<Person> query = cb.createQuery(Person.class);
Root<Person> root = query.from(Person.class);
Join<Person, User> joinUser = root.join("user");
query.where(cb.like(cb.lower(joinUser.get("name")), "%" + username.toLowerCase() + "%"));
编辑 1:添加 ModelCore 作为基类。 编辑 2:添加工作解决方案
【问题讨论】:
-
您将如何使用 JPQL 查询,甚至是 SQL 查询来做到这一点?
标签: java hibernate jpa hibernate-criteria