JPA(2.0)标准简单加入

时间:2013-05-16 18:09:24

标签: java jpa criteria-api

我在为以下sql创建criteriaQuery时遇到问题。 任何帮助将不胜感激。可以说我有两张桌子会员和人。 我正在加入姓名和年龄,并在两个表中都有where子句。 我正在使用OpenJPA(2.0)

select * 
from Member
join Person
on Member.name = Person.name 
    and Member.age = Person.age
where Member.name = 'someOne'
and Member.age = '24'
and Person.gender = 'F'
and Person.type = 'employee' 

1 个答案:

答案 0 :(得分:0)

这样的事情怎么样:

CriteriaBuilder builder = em.getCriteriaBuilder();
CriteriaQuery<Tuple> criteria = builder.createTupleQuery();
Root<Member> fromMember = criteria.from(Member.class);
Root<Person> fromPerson = criteria.from(Person.class);
criteria.multiselect(fromMember, fromPerson);
List<Predicate> predicates = new ArrayList<Predicate>();
predicates.add(builder.equal(fromMember.get(Member_.name), fromPerson.get(Person_.name)));
predicates.add(builder.equal(fromMember.get(Member_.age), fromPerson.get(Person_.age)));
predicates.add(builder.equal(fromMember.get(Member_.name), "someOne"));
predicates.add(builder.equal(fromMember.get(Member_.age), 24));
predicates.add(builder.equal(fromPerson.get(Person_.gender), "F"));
predicates.add(builder.equal(fromPerson.get(Person_.type), "employee"));
criteria.where(predicates.toArray(new Predicate[predicates.size()]));
List<Tuple> result = em.createQuery(criteria).getResultList();

这将返回由Member和Person组成的2元素元组。如果您希望在每个元组中都有单独的字段,则可以枚举多调选调用中的各个字段。