【问题标题】:JPA(2.0) Criteria Simple JoinJPA(2.0) 标准简单连接
【发布时间】:2013-05-16 18:09:23
【问题描述】:

我在为以下 sql 创建条件查询时遇到问题。 任何帮助将不胜感激。假设我有两张表成员和人员。 我加入了姓名和年龄,并为这两个表添加了 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' 

【问题讨论】:

  • 您可以更具体地了解您遇到的这个问题。方法,要显示的代码,什么?
  • 我查看了在线示例,但它们仅显示了您如何处理具有一对多关系的两个实体等。我想要简单的加入。由于我是 JPA 2.0 的新手,请您举一些例子...

标签: java jpa criteria-api


【解决方案1】:

这样的事情怎么样:

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 元素元组。如果您希望在每个元组中都有单独的字段,您可以在多选调用中枚举单独的字段。

【讨论】:

    猜你喜欢
    • 2016-01-19
    • 2016-05-23
    • 2017-03-13
    • 2013-01-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-23
    相关资源
    最近更新 更多