【问题标题】:java.lang.ClassCastException: org.hibernate.impl.CriteriaImpl cannot be castjava.lang.ClassCastException: org.hibernate.impl.CriteriaImpl 不能被强制转换
【发布时间】:2016-03-24 14:17:02
【问题描述】:

我是 Hibernate Criteria 的新手,我发现了很多使用列表的示例。 喜欢了解如何将标准对象转换为 Employee 对象。 Hibernate Criteria 是否可以返回类实体。

Employee emp=  (Employee) session.createCriteria(Employee.class,"a")
.createAlias("a.jobs", "j") 
.add(Restrictions.eq("id", id))
.add(Restrictions.eq("j.active", "1"));

java.lang.ClassCastException: org.hibernate.impl.CriteriaImpl 无法转换为 Employee。

jobs对象是一对多关系,试图过滤jobs的active对象

【问题讨论】:

    标签: hibernate hibernate-criteria


    【解决方案1】:

    你需要使用list()方法

    List<Employee> result =  (List<Employee>) session.createCriteria(Employee.class,"a")
    .createAlias("a.jobs", "j") 
    .add(Restrictions.eq("id", id))
    .add(Restrictions.eq("j.active", "1")).list();
    

    uniqueResult(),但如果有多个记录,则会出现异常。如果没有任何结果uniqueResult() 将返回null

    Employee result = (Employee) session.createCriteria(Employee.class,"a")
    .createAlias("a.jobs", "j") 
    .add(Restrictions.eq("id", id))
    .add(Restrictions.eq("j.active", "1")).uniqueResult();
    

    【讨论】:

    • 当我按 ID 过滤时,它将是一个对象。
    • @CorkKochi 我更新了我的答案。您只能使用这两种方法。
    【解决方案2】:

    如果有多个记录,但您希望将单个唯一结果转换为模型类而不使用列表,那么您还可以使用以下内容:

    Employee emp=  (Employee) session.createCriteria(Employee.class,"a")
    .createAlias("a.jobs", "j") 
    .add(Restrictions.eq("id", id))
    .add(Restrictions.eq("j.active", "1")).setMaxResults(1).uniqueResult();
    

    【讨论】:

      猜你喜欢
      • 2011-06-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-05-30
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多