【问题标题】:Java Hibernate HQL to Hibernate CriteriaJava Hibernate HQL 到 Hibernate 标准
【发布时间】:2012-10-26 08:59:36
【问题描述】:

我有一个使用 Hibernate HQL 查询的类。我想将这些更改为 Hibernate Criteria 查询。 然而,Hibernate Criteria 对我来说比 HQL 更难理解,即使有教程也是如此。有人可以告诉我其中一个查询使用 Hibernate Criteria/Filters 的样子吗?

Configuration configuration = new Configuration();
        configuration.configure().setProperty("hibernate.show_sql", "false");
ServiceRegistry serviceRegistry = new ServiceRegistryBuilder().applySettings(
                                  configuration.getProperties()).buildServiceRegistry();
SessionFactory sessionFactory = new Configuration().configure().buildSessionFactory(serviceRegistry);

Session session =sessionFactory.openSession();
Transaction tx = session.beginTransaction();
Query query = session.createQuery("from TABLENAME WHERE IDObject1= :idObjectA" +
              "AND IDObject2= :idObjectB AND IDSettingOption = :idSettingOption");
query.setParameter("idObjectA", idObjectB);
query.setParameter("idObjectB", idObjectB);
query.setParameter("idSettingOption", idSettingOption);

List results = query.list();

提前致谢!

【问题讨论】:

  • 你的表描述是什么?
  • @atteij 当您选择其中一个答案时,问题的状态为“已更改为已解决”。
  • 您的答案使用的是“Hibernate Criteria”而不是“JPA Criteria”(它们是不同的)。如果您想要特定于 Hibernate 或独立于 JPA 提供程序的答案,建议您澄清您的问题......如果您想要 Hibernate Criteria,请从问题中删除“jpa”标签
  • 我明白了。我的印象是它的意思是一样的。我正在寻找仍然与 JPA 兼容的 Hibernate 标准。我将编辑我的问题
  • 感谢 Paul :) 一切都清楚后我会这样做

标签: java hibernate hibernate-criteria


【解决方案1】:
Criteria criteria = session.createCriteria( TABLENAME.class );

criteria.add( Restrictions.eq( "IDObject1" , idObjectB) );
criteria.add( Restrictions.eq( "IDObject2" , idObjectB) );
criteria.add( Restrictions.eq( "IDSettingOption" ,idSettingOption) );

List results = criteria.list();

这里你可以阅读 Criteria API,它有很多例子:
http://docs.jboss.org/hibernate/orm/3.3/reference/en/html/querycriteria.html

【讨论】:

  • 感谢您的回答:) 最后一个清晰简单的例子。我当然可以用这个
  • 不像问的问题那样“使用 JPA 标准/过滤器”?
  • 什么意思?它确实使用了标准,还是我遗漏了什么?
  • @Attiej:这是使用 Hibernate Criteria API,而不是 JPA。无论如何,您使用的是 Hibernate 的 Session 而不是 JPA 的 EntityManager
  • 我的错误,我的意思是 Hibernate Criteria
【解决方案2】:
List results = session.createCriteria(Entity.class)
    .add(Restrictions.eq("IDObject1", idObjectA))
    .add(Restrictions.eq("IDObject2", idObjectB))
    .add(Restrictions.eq("idSettingOption", idSettingOption))
    .list();

【讨论】:

  • 不像问的问题那样“使用 JPA 标准/过滤器”?
  • 由于发布的代码,我假设在这种情况下直接使用休眠。你是对的,问题的其余部分暗示了 JPA
猜你喜欢
  • 2011-08-25
  • 2010-09-16
  • 2014-11-20
  • 2014-01-20
  • 2015-04-25
  • 1970-01-01
  • 1970-01-01
  • 2011-05-19
相关资源
最近更新 更多