【问题标题】:JPA 2.0 Hibernate 4.3/5.x java.lang.ClassNotFoundException: javax.persistence.NamedStoredProcedureQueryJPA 2.0 Hibernate 4.3/5.x java.lang.ClassNotFoundException: javax.persistence.NamedStoredProcedureQuery
【发布时间】:2017-09-11 05:06:17
【问题描述】:

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

<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>

【问题讨论】:

    标签: hibernate jpa jpa-2.0 hibernate-4.x hibernate-5.x


    【解决方案1】:

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

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

    【讨论】:

    • 从 5.2 开始,hibernate-entitymanager 只是重定向到 hibernate-core
    • 你是对的,但我发现如果 entitymanager 包不在类路径中,核心模块将使用 JPA 2.1 接口。
    • 我很确定您最终还是使用了 2.1 接口,否则它仍然会因 ClassNotFoundException 而崩溃。无论如何,您不应该在尝试时强制降级该排除项。这才是真正的问题。
    猜你喜欢
    • 2015-03-30
    • 1970-01-01
    • 1970-01-01
    • 2014-05-27
    • 2016-04-09
    • 1970-01-01
    • 1970-01-01
    • 2017-06-04
    • 2013-08-21
    相关资源
    最近更新 更多