2017-04-14 60 views
0

所以我遇到了前面提到的ClassNotFoundException。显然在较新版本的休眠org.hibernate.cfg.AnnotationBinder是依赖于javax.persistence.NamedStoredProcedureQuery。这是您正在使用JPA 2.1的正确行为。但是,当您需要JPA 2.0时,情况并非如此。JPA 2.0 Hibernate 4.3/5.x java.lang.ClassNotFoundException:javax.persistence.NamedStoredProcedureQuery

<dependency> 
    <groupId>org.hibernate.javax.persistence</groupId> 
    <artifactId>hibernate-jpa-2.0-api</artifactId> 
    <version>1.0.1.Final</version> 
</dependency> 
<dependency> 
    <groupId>org.hibernate</groupId> 
    <artifactId>hibernate-core</artifactId> 
    <version>5.2.10.Final</version> 
    <exclusions> 
     <exclusion> 
      <groupId>org.hibernate.javax.persistence</groupId> 
      <artifactId>hibernate-jpa-2.1-api</artifactId> 
     </exclusion> 
    </exclusions> 
</dependency> 

回答

0

您必须将hibernate-entitymanager添加到您的类路径中。这是一个空罐子,但由于某种原因,它使核心jar jpa 2.0兼容。

<dependency> 
    <groupId>org.hibernate</groupId> 
    <artifactId>hibernate-entitymanager</artifactId> 
    <version>${hibernate.version}</version> 
</dependency> 
+0

从5.2开始,'hibernate-entitymanager'只是简单的重定向到'hibernate-core'。 – coladict

+0

你是对的,但我发现如果entitymanager包不在类路径上,核心模块将使用JPA 2.1接口。 – pjanssen

+0

我很确定你只是最终使用了2.1接口,或者它仍然会因为ClassNotFoundException而崩溃。无论如何,当你尝试过时,你不应该强制降级排除。这是真正的问题。 – coladict