Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/hibernate/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java JPA继承entitymanager.find生成ClassCastException_Java_Hibernate_Spring_Orm_Jpa - Fatal编程技术网

Java JPA继承entitymanager.find生成ClassCastException

Java JPA继承entitymanager.find生成ClassCastException,java,hibernate,spring,orm,jpa,Java,Hibernate,Spring,Orm,Jpa,我有这样的类层次结构: @Entity @Table (name="call_distribution_policies") @Inheritance (strategy=InheritanceType.JOINED) public class CallDistributionPolicy implements Serializable, Cloneable{ ---------------- } @Entity @Table(name="skill_based_call_distr

我有这样的类层次结构:

@Entity
@Table  (name="call_distribution_policies")
@Inheritance (strategy=InheritanceType.JOINED)
public class CallDistributionPolicy implements Serializable, Cloneable{
    ----------------
}

@Entity
@Table(name="skill_based_call_distribution_policies")
public class SkillBasedCallDistributionPolicy extends CallDistributionPolicy {

    --------------
}

public class CallDistributionPolicyDAOJPAImpl extends
    AbstractJPADAOImpl<CallDistributionPolicy> implements
    CallDistributionPolicyDAO {
}

    public CallDistributionPolicy get(long id) {
    try {
        Query query = entityManager
                .createQuery("from CallDistributionPolicy where id = :id");

        query.setParameter("id", id);

        List<CallDistributionPolicy> resultList = query.getResultList();

        if (!CollectionUtils.isEmpty(resultList)) {
            return resultList.get(0);
        }

        return null;
    } catch (EntityNotFoundException e) {
        return null;
    }
}
}
我得到了类强制转换异常

    com.vantage.callcenter.core.entity.acd.CallDistributionPolicy$$EnhancerByCGLIB$$334f3d1b cannot be cast to com.vantage.callcenter.core.entity.acd.SkillBasedCallDistributionPolicy 
instanceof检查也失败

在eclipse中检查对象时,我看到了CGLIB代理,但据我所知,CGLIB代理应该扩展SkillsBasedCallDistributionPolicy类?在CGLIB$CALLBACK_0属性中,我可以看到实体类是“CallDistributionPolicy”,但目标是“SkillsBasedCallDistributionPolicy”

加载子类的正确过程应该是什么?我可以看到hibernate正在生成所有正确的SQL并加载正确的子类,但是如何检查instanceof并将其转换为子类呢


我使用的是hibernate 3.2.1、Spring 2.5.5、cglib2.1_3。有什么建议吗?

我知道Hibernate在很长一段时间内一直存在这个问题,例如,请参见:

  • )
我所说的问题,是指bug、
实例和强制转换应该可以正常工作

但是我无法用Hibernate 3.3.0.SP1重现您的问题。
instanceof
和使用连接策略对层次结构的子类进行强制转换都很有效。通过以下方式进行测试:

    <dependency>
        <groupId>org.hibernate</groupId>
        <artifactId>hibernate-cglib-repack</artifactId>
        <version>2.1_3</version>
    </dependency>

org.hibernate
休眠cglib重新打包
2.1_3


javassist
javassist
3.8.0.GA
我很确定这是Jira的问题,但找不到


问题(bug)在我的应用程序中是一致的。您能在这里发布您的工作pom.xml吗?这样我就可以确切地看到您使用的hibernate依赖项是什么

下面是我使用的依赖项:

<project>
  ...
  <dependencyManagement>
    <dependencies>
      <dependency>
        <groupId>org.slf4j</groupId>
        <artifactId>slf4j-api</artifactId>
        <version>1.5.10</version>
      </dependency>
    </dependencies>
  </dependencyManagement>
  ...
  <dependencies>
    <dependency>
      <groupId>org.hibernate</groupId>
      <artifactId>hibernate-entitymanager</artifactId>
      <version>3.4.0.GA</version>
      <exclusions>
        <exclusion>
          <groupId>javassist</groupId>
          <artifactId>javassist</artifactId>
        </exclusion>
      </exclusions>
    </dependency>
    <dependency>
      <groupId>org.hibernate</groupId>
      <artifactId>hibernate-cglib-repack</artifactId>
      <version>2.1_3</version>
    </dependency>
    ...
  </dependencies>
</project>

...
org.slf4j
slf4j api
1.5.10
...
org.hibernate
休眠实体管理器
3.4.0.GA
javassist
javassist
org.hibernate
休眠cglib重新打包
2.1_3
...
以下是依赖关系树:

[INFO] +- org.hibernate:hibernate-entitymanager:jar:3.4.0.GA:compile [INFO] | +- org.hibernate:ejb3-persistence:jar:1.0.2.GA:compile [INFO] | +- org.hibernate:hibernate-commons-annotations:jar:3.1.0.GA:compile [INFO] | +- org.hibernate:hibernate-annotations:jar:3.4.0.GA:compile [INFO] | +- org.hibernate:hibernate-core:jar:3.3.0.SP1:compile [INFO] | | +- antlr:antlr:jar:2.7.6:compile [INFO] | | \- commons-collections:commons-collections:jar:3.1:compile [INFO] | +- org.slf4j:slf4j-api:jar:1.5.10:compile [INFO] | +- dom4j:dom4j:jar:1.6.1:compile [INFO] | | \- xml-apis:xml-apis:jar:1.0.b2:compile [INFO] | \- javax.transaction:jta:jar:1.1:compile ... [INFO] \- org.hibernate:hibernate-cglib-repack:jar:2.1_3:compile [INFO]+-org.hibernate:hibernate entitymanager:jar:3.4.0.GA:compile [INFO]|+-org.hibernate:ejb3持久性:jar:1.0.2.GA:compile [INFO]|+-org.hibernate:hibernate commons注释:jar:3.1.0.GA:compile [INFO]|+-org.hibernate:hibernate注释:jar:3.4.0.GA:compile [INFO]|+-org.hibernate:hibernate核心:jar:3.3.0.SP1:compile [INFO]| |+-antlr:antlr:jar:2.7.6:编译 [INFO]| | \-公用集合:公用集合:jar:3.1:编译 [信息]|+-org.slf4j:slf4j api:jar:1.5.10:编译 [INFO]|+-dom4j:dom4j:jar:1.6.1:compile [INFO]| | \-xmlapi:xmlapi:jar:1.0.b2:compile [INFO]\-javax.transaction:jta:jar:1.1:compile ... [INFO]\-org.hibernate:hibernate cglib repack:jar:2.1\u 3:compile
什么是
抽象JPADAOIMPL
?春天的刀是怎么接线的?嗨,帕斯卡,谢谢你的回复。问题(bug)在我的应用程序中是一致的。您能在这里发布您的工作pom.xml吗?这样我就可以确切地看到您使用的是什么hibernate依赖项了?谢谢,我会更新我的pom,看看它是否有什么不同。
<project>
  ...
  <dependencyManagement>
    <dependencies>
      <dependency>
        <groupId>org.slf4j</groupId>
        <artifactId>slf4j-api</artifactId>
        <version>1.5.10</version>
      </dependency>
    </dependencies>
  </dependencyManagement>
  ...
  <dependencies>
    <dependency>
      <groupId>org.hibernate</groupId>
      <artifactId>hibernate-entitymanager</artifactId>
      <version>3.4.0.GA</version>
      <exclusions>
        <exclusion>
          <groupId>javassist</groupId>
          <artifactId>javassist</artifactId>
        </exclusion>
      </exclusions>
    </dependency>
    <dependency>
      <groupId>org.hibernate</groupId>
      <artifactId>hibernate-cglib-repack</artifactId>
      <version>2.1_3</version>
    </dependency>
    ...
  </dependencies>
</project>
[INFO] +- org.hibernate:hibernate-entitymanager:jar:3.4.0.GA:compile [INFO] | +- org.hibernate:ejb3-persistence:jar:1.0.2.GA:compile [INFO] | +- org.hibernate:hibernate-commons-annotations:jar:3.1.0.GA:compile [INFO] | +- org.hibernate:hibernate-annotations:jar:3.4.0.GA:compile [INFO] | +- org.hibernate:hibernate-core:jar:3.3.0.SP1:compile [INFO] | | +- antlr:antlr:jar:2.7.6:compile [INFO] | | \- commons-collections:commons-collections:jar:3.1:compile [INFO] | +- org.slf4j:slf4j-api:jar:1.5.10:compile [INFO] | +- dom4j:dom4j:jar:1.6.1:compile [INFO] | | \- xml-apis:xml-apis:jar:1.0.b2:compile [INFO] | \- javax.transaction:jta:jar:1.1:compile ... [INFO] \- org.hibernate:hibernate-cglib-repack:jar:2.1_3:compile