我有2个域实体的基本结构:
用户持有(拥有)UserDetails,而UseDetails拥有String userName。
使用JPA条件API我想提交一个简单的查询,该查询按给定的用户名加载用户。
在代码中,我希望它看起来或多或少像这样:
public User findByUsername(String userName) {
CriteriaBuilder qb = entityManager.getCriteriaBuilder();
CriteriaQuery<User> c = qb.createQuery(User.class);
Root<User> user = c.from(User.class);
Predicate condition = qb.equal(user.get(User_.userDetails.getuserName()), userName);
c.where(condition);
TypedQuery<User> q = entityManager.createQuery(c);
List<User> result = q.getResultList();
if (result.isEmpty()) {
return null;
}
return result.get(0);
}
但是这不起作用,因为在User_.userDetails下找不到getuserName()。 我想这不是这样做的方法,也许我需要在这些表之间实现Join(User和UserDetails)?
我该怎么办?
答案 0 :(得分:0)
我现在不能尝试,但我认为你必须这样做:
Predicate condition = qb.equal(user.get(User_.userDetails).get(UserDetails_.userName), userName);