简体   繁体   English

JPA(2.0)标准简单联接

[英]JPA(2.0) Criteria Simple Join

I am having problem creating criteriaQuery for the following sql. 我在为以下sql创建criteriaQuery时遇到问题。 Any help would be appreciated.Lets say I have two tables Member and Person. 任何帮助将不胜感激。让我们说我有两个表成员和人。 I am joining on name and age and having where clause for both of the table. 我加入了姓名和年龄,并且在两个表中都有where子句。 I am using OpenJPA(2.0) 我正在使用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' 

How about something like this: 这样的事情怎么样:

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();

This will return a 2-element tuple made up of Member and Person. 这将返回由Member和Person组成的2元素元组。 You can enumerate the individual fields in the call to multiselect if you would rather have individual fields in each tuple. 如果希望每个元组中都有单个字段,则可以枚举对multiselect的调用中的单个字段。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM