【问题标题】:how can we give hibernate session.get 2nd arg as non id value我们如何将休眠 session.get 2nd arg 作为非 id 值
【发布时间】:2013-12-03 22:28:38
【问题描述】:

通常我使用 hibernate session.get(Class.class,id) 来获取实体类。 在 get 方法中,我将第二个 arg 作为 id 值(即 int id=7) 我的问题是如何在休眠 session.get(Class.class,non_id) 中使用非 id 值,我需要使用其他列(非 id 列)获取值。

【问题讨论】:

标签: java hibernate


【解决方案1】:

您可以使用Criteria Queries。所以在你的情况下可能是这样的:

Criteria crit = session.createCriteria(Class.class);  
crit.add(Restrictions.eq("non_id", "myNonIdValue"));
List results = crit.list();
Class myClassObj = (myClassObj) results.get(0);

【讨论】:

    【解决方案2】:

    您无法使用非 ID 进行获取。您必须像在 SQL 中一样查询所需的对象。

    String queryText = "from SomeObject where objectPropery = :VALUE"
    Query queryObj = session.createQuery( queryText );
    queryObj.setParameter( "VALUE", value );
    return queryObj.uniqueResult()
    

    您可以在此处阅读有关 queryObjects 的所有信息:Query

    如果您要查询对象,则必须了解HQL

    【讨论】:

    • 你不能用非 id 做session.get,对吧。但是,当存在标准查询时,为什么要构建一个复杂的查询呢?看我的回答...
    【解决方案3】:

    您可以将HibernateJPA 2 一起使用

    class MyClass { @Id long id; @Basic String description; }
    
    TypedQuery<MyClass> query =
            getEntityManager().createNamedQuery("select myClass from MyClass where description = :description", MyClass.class);
        query.setParameter("description", "example");
       List<MyClass> myClasses = query.getResultList();
    

    或单个实体:

    MyClass myClass = query.getSingleResult();
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-02-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-04-05
      • 1970-01-01
      • 2010-10-11
      相关资源
      最近更新 更多