私はSpring MVC 3で開発され、Maven 3で構築されたHibernateプロジェクトを持っています.JPA、特にHibernate Frameworkで永続性を管理しています。既存のソースを OpenJpa 用に構成することはそれほど難しくないと思いますが、私はそれに慣れていないので、Hibernate から OpenJpa に一貫した方法で切り替えるようにプロジェクトを構成する手順を知りたいです。
ご挨拶
私はSpring MVC 3で開発され、Maven 3で構築されたHibernateプロジェクトを持っています.JPA、特にHibernate Frameworkで永続性を管理しています。既存のソースを OpenJpa 用に構成することはそれほど難しくないと思いますが、私はそれに慣れていないので、Hibernate から 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)
適切な 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)
そして、私のように、あなたは当惑するでしょう。注釈を使用する場合、注釈に固有の Configuration のサブクラスである 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();
}
}
それが役立つことを願っています!!