所以我有一个名为'User'的表,其字段为
-
userId
-
userName
-
supervisorId
我想获取特定用户的主管的userName .
CriteriaBuilder criteriaBuilder = em.getCriteriaBuilder();
CriteriaQuery<User> criteriaQuery = criteriaBuilder.createQuery(User.class);
Root<User> rootUser = criteriaQuery.from(User.class);
List<Predicate> predList = new ArrayList<Predicate>();
Join<User, User> selfJoin = rootUser.join("userId", JoinType.LEFT); //not sure about this line
predList.add(criteriaBuilder.equal(selfJoin.<String>get("userId"), supervisorId)); //supervisorId is the id of the supervisor that I want to find
TypedQuery<User> typedQuery = em.createQuery(criteriaQuery);
List<User> resultList = typedQuery.getResultList();
现在,除了这位主管之外,我还有许多其他条件 . 所以我必须使用相同的标准查询 .
谢谢 .
1 回答
Criteria API适用于需要build queries dynamically的时候,您应该始终记住它基于遍历实体 .
您需要的是一个简单的SQL查询,如下所示:
仅仅因为你使用JPA和Hibernate,it does not mean that you should not use SQL queries .
如果您map the supervisor as a @ManyToOne association,可以非常轻松地编写Criteria API查询:
然后,联接变为: