【问题标题】:JPA Criteria analog to Hibernate Criteria AliasJPA Criteria 类似于 Hibernate Criteria Alias
【发布时间】:2017-03-15 16:20:55
【问题描述】:

假设我的类型为User,其中包含Tenant 类的对象,属性为Name

我想从数据库中选择用户,其租户包含给定的名称。

在 Hibernate Criteria 中,我可以简单地使用别名来实现这个目标。

List cats = session.createCriteria(User.class)
    .createAlias("tenant", "tenant")
    .add(Restrictions.eqProperty("tenant.name", "sampleTenant") )
    .list();

我怎样才能对 JPA Criteria 做同样的事情?

感谢您的帮助。

【问题讨论】:

  • 如果您发布显示其注释的实体(模型)类真的很有帮助,然后像我这样试图找出相同内容的人知道我们是否在正确的位置,感谢您考虑它。
  • 这个问题还有其他答案吗?奇怪的是没有人回答正确。

标签: java jpa criteria


【解决方案1】:

假设UserTenant 是一对一关系:

CriteriaBuilder cb = em.getCriteriaBuilder();
CriteriaQuery<User> cq = cb.createQuery(User.class);
Root<User> root = cq.from(User.class);
cq = cq.where(cb.equal(root.join("tenant").get("name"), "sampleTenant"));
em.createQuery(cq).getResultList();

【讨论】:

  • 这并没有回答如何使用别名的问题。您只是执行了正确的连接,但问题是关于如何指定别名(如果我们需要它们)。
  • 问题是:'我想从数据库用户中选择,其租户包含给定名称'。使用 Hibernate Criteria 的解决方案(显然)涉及使用别名。使用 Criteria API 的解决方案没有。
  • 好的,很公平。但是您应该澄清在 JPA Criteria API 中没有为此目的使用别名。确切的答案是:“使用 Criteria API 时不需要别名,只需使用类型安全的对象来引用您感兴趣的属性即可。” forum.hibernate.org/viewtopic.php?f=1&t=1045112
【解决方案2】:

我使用下面来获取会话,从会话开始休息是一样的

Session session = ((Session)entityManager.getDelegate());

您可以探索JPA CriteriaBuilder

【讨论】:

  • 所以你没有使用 JPA Criteria (你使用的是 Session 和 Hibernate Criteria),但问题明确要求 JPA Criteria ...
猜你喜欢
  • 1970-01-01
  • 2013-06-21
  • 1970-01-01
  • 1970-01-01
  • 2014-09-16
  • 2019-03-28
  • 1970-01-01
  • 2011-10-28
  • 2021-11-13
相关资源
最近更新 更多