【问题标题】:How to switch from Hibernate to OpenJpa如何从 Hibernate 切换到 OpenJpa
【发布时间】:2013-05-03 22:56:26
【问题描述】:

我有一个使用 Spring MVC 3 开发并使用 Maven 3 构建的 Hibernate 项目。我使用 JPA 管理持久性,尤其是 Hibernate Framework;我想为 OpenJpa 配置我现有的源并不难,但我是新手,我想知道配置我的项目以一致的方式从 Hibernate 切换到 OpenJpa 的步骤。

问候

【问题讨论】:

  • 我添加了一些解释和我的搜索结果: - Spring 中定义的 bean 是相同的,但是成为 OpenJpa 供应商的 jpa 供应商 - 我必须将 OpenJpa 插件添加到我的 pom.xml -I '必须更改 persistence.xml 文件,但是什么以及如何更改?

标签: java spring maven persistence openjpa


【解决方案1】:

按照以下步骤操作:

要切换到注释,您需要:

Add hibernate-annotations and JPA jars
Annotate your classes
Modify hibernate.cfg.xml to use classes instead of mapping files
Modify your HibernateUtil class to use a different configuration (this is the step that tripped me up)

为了添加正确的 jar,我使用 Maven 并添加了以下附加依赖项:

<dependency>

  <groupId>javax.persistence</groupId>

  <artifactId>persistence-api</artifactId>

  <version>1.0</version>

</dependency>

<dependency>

 <groupId>org.hibernate</groupId>

  <artifactId>hibernate-annotations</artifactId>

  <version>3.3.1.GA</version>

</dependency>

有很多关于 JPA 注释的优秀资源,所以我不打算详细讨论。您将拥有如下所示的内容:

@Entity

@Table(name = “USERS”)

public class User {

@Id @GeneratedValue

@Column(name = “USER_ID”)

private Long id;

@Column(name = “FIRST_NAME”)

private String firstName;

@Column(name = “LAST_NAME”)

private String lastName;

@Column(name = “EMAIL”)

private String email;

// etc

}

要更新 hibernate.cfg.xml 文件,您需要像这样更改行:

<mapping resource="org/terracotta/reference/exam/domain/User.hbm.xml"/>

到这样的事情:

<mapping class="org.terracotta.reference.exam.domain.User">

如果你做了所有这些并停在那里,你可能会看到这样的异常:

Exception in thread "main" java.lang.ExceptionInInitializerError
    at org.terracotta.reference.exam.domain.HibernateUtil.<clinit>(HibernateUtil.java:15)
    at org.terracotta.reference.exam.domain.Main.main(Main.java:12)
Caused by: org.hibernate.MappingException: An AnnotationConfiguration instance is required to use <mapping class="org.terracotta.reference.exam.domain.User"/>
    at org.hibernate.cfg.Configuration.parseMappingElement(Configuration.java:1600)
    at org.hibernate.cfg.Configuration.parseSessionFactory(Configuration.java:1555)
    at org.hibernate.cfg.Configuration.doConfigure(Configuration.java:1534)
    at org.hibernate.cfg.Configuration.doConfigure(Configuration.java:1508)
    at org.hibernate.cfg.Configuration.configure(Configuration.java:1428)
    at org.hibernate.cfg.Configuration.configure(Configuration.java:1414)
    at org.terracotta.reference.exam.domain.HibernateUtil.<clinit>(HibernateUtil.java:13)

而且,像我一样,你会感到困惑。事实证明,在使用注解时需要使用 AnnotationConfiguration,它是 Configuration 的子类,专门用于注解。因此,您的 HibernateUtil 可能看起来像这样:

package org.terracotta.reference.exam.domain;

import org.hibernate.SessionFactory;
import org.hibernate.cfg.AnnotationConfiguration;

public class HibernateUtil {

private static SessionFactory sessionFactory;

static {

try {

sessionFactory = new AnnotationConfiguration().configure().buildSessionFactory();

} catch(Throwable t) {

throw new ExceptionInInitializerError(t);

}

}

public static SessionFactory getSessionFactory() {

return sessionFactory;

}

public static void shutdown() 
{

getSessionFactory().close();

}

}

希望有帮助!!

【讨论】:

  • 非常感谢!我有两个问题。我从未配置过 hibernate.cfg.xml,我的项目中没有配置过……是否真的有必要更改 Hibernate 配置以使用像 OpenJpa 这样的并发框架?除了我在第一条评论中提到的步骤之外,我还需要执行所有这些步骤吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-03-07
  • 2015-09-22
  • 2017-07-16
  • 2015-01-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多