1

这是我的 pom.xml:

  <dependency>
      <groupId>org.hibernate</groupId>
      <artifactId>hibernate-entitymanager</artifactId>
      <version>3.5.1-Final</version>
  </dependency>

  <dependency>
      <groupId>org.hibernate</groupId>
      <artifactId>hibernate-core</artifactId>
      <version>3.6.10.Final</version>
  </dependency>

当我拥有这两个依赖项时,我可以成功运行我的 Hello World 示例。(它使用persistence.xml和一个类,该类使用@Entity注释映射到我的数据库中的表。但是,当我将hibernate-core更改为:

<dependency>
      <groupId>org.hibernate</groupId>
      <artifactId>hibernate-core</artifactId>
      <version>4.2.1.Final</version>
  </dependency>

我得到:

线程“主”java.lang.IllegalAccessError 中的异常:试图从类 org.hibernate.ejb.Ejb3Configuration 访问方法 org.hibernate.cfg.Configuration.(Lorg/hibernate/cfg/SettingsFactory;)V

那么如何使用 hibernate core 4.2.1 final 作为 JPA 实现呢?我猜 hibernate-entitymanager 没有第 4 版?

4

2 回答 2

2

hibernate-entitymanager同一个版本就好了

<dependency>
    <groupId>org.hibernate</groupId>
    <artifactId>hibernate-entitymanager</artifactId>
    <version>4.2.1.Final</version>
</dependency>
于 2013-05-11T23:43:46.960 回答
2

这个设置对我有用。您需要为这两个组件提供相同或相似的发行版/版本号,因为如果您同时使用 4.xx 和 3.xx,它们会大不相同。

<dependency>
        <groupId>org.hibernate</groupId>
        <artifactId>hibernate-core</artifactId>
        <version>4.1.1.Final</version>
    </dependency>
    <dependency>
        <groupId>org.hibernate</groupId>
        <artifactId>hibernate-entitymanager</artifactId>
        <version>4.1.1.Final</version>
    </dependency>

处理(Hibernate 或其他)版本号的常用方法是在属性中指定一次版本,如下所示

<properties>
    <hibernate.version>4.1.1.Final</hibernate.version>
</properties>

然后在依赖声明中引用该属性..

    <dependency>
        <groupId>org.hibernate</groupId>
        <artifactId>hibernate-core</artifactId>
        <version>${hibernate.version}</version>
    </dependency>
    <dependency>
        <groupId>org.hibernate</groupId>
        <artifactId>hibernate-entitymanager</artifactId>
        <version>${hibernate.version}</version>
    </dependency>
于 2013-05-11T23:44:09.310 回答