2013-05-09 3 views
0

У меня есть проект Hibernate, разработанный с помощью Spring MVC 3 и построенный с Maven 3. Я управляю упорством с JPA, в частности с Hibernate Framework; Я думаю, что не сложно сконфигурировать мой существующий источник для OpenJpa, но я новичок в этом, и я хотел бы знать, каковы шаги по настройке моего проекта на последовательный переход от Hibernate к OpenJpa.Как переключиться с Hibernate на OpenJpa

Приветствия

+0

добавить какое-то объяснение и результат моих поисков: - фасоль, определенная весной такое же, но JPA поставщик, который становится OpenJPA поставщиком -У добавить OpenJPA плагин к моей pom.xml -У изменить файл persistence.xml, но что и как? – andPat

ответ

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) 

Чтобы добавить правильные банки, я использую 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(); 

} 

} 

Надеюсь, что это поможет!

+0

Спасибо большое! У меня два вопроса. Я никогда не настраивал hibernate.cfg.xml, у меня нет ни одного в моем проекте ... действительно ли необходимо изменить конфигурацию Hibernate для использования параллельной структуры, такой как OpenJpa? и выполнить все эти шаги в дополнение к шагам, которые я упомянул в первом комментарии? – andPat

Смежные вопросы