我有一個用Spring MVC 3開發並用Maven 3構建的Hibernate項目。我使用特定的Hibernate Framework管理JPA的持久性;我想這不是很難配置我現有的OpenJpa源代碼,但我對它很陌生,我想知道什麼是配置我的項目以從Hibernate到OpenJpa以一致的方式切換的步驟。如何從休眠狀態切換到OpenJpa
問候
我有一個用Spring MVC 3開發並用Maven 3構建的Hibernate項目。我使用特定的Hibernate Framework管理JPA的持久性;我想這不是很難配置我現有的OpenJpa源代碼,但我對它很陌生,我想知道什麼是配置我的項目以從Hibernate到OpenJpa以一致的方式切換的步驟。如何從休眠狀態切換到OpenJpa
問候
遵循以下步驟:
要切換到註釋,你需要:
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)
加入正確的罐子,我使用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(特定於註釋的配置的子類)。所以,你的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這樣的併發框架? 除了我在第一條評論中提到的步驟之外,是否還必須執行所有這些步驟? – andPat 2013-05-09 13:32:05
我加我的搜索一些解釋和結果: - 在Spring中定義豆一樣的,但變成OpenJPA的供應商 -I've JPA的供應商到OpenJPA插件添加到我的pom.xml -I've更改persistence.xml文件,但是什麼和如何? – andPat 2013-05-09 12:52:39