2011-08-06 31 views
8

Estoy desarrollando un hibernate con el proyecto JPA y tratando de obtener el trabajo persistence.xml usando H2 (Base de datos incrustada).Conexión JPA con la base de datos H2

persistence.xml

<persistence xmlns="http://java.sun.com/xml/ns/persistence" 
    version="1.0"> 

    <persistence-unit name="DefaultPersistenceUnit" 
     transaction-type="RESOURCE_LOCAL"> 

     <provider>org.hibernate.ejb.HibernatePersistence</provider> 
     <class>entity.user</class> 
     <properties> 
      <property name="hibernate.connection.url" value="jdbc:h2:/~test" /> --> 
      <property name="hibernate.dialect" value="org.hibernate.dialect.H2Dialect"></property> 
      <property name="hibernate.connection.driver_class" value="org.h2.Driver" /> 
      <property name="hibernate.connection.password" value="admin" /> 
      <property name="hibernate.connection.username" value="admin" /> 
     </properties> 
    </persistence-unit> 
</persistence> 

Pero mi esto no funciona, siempre estoy consiguiendo el error

"No se puede crear EntityManagerFactory"

EntityManagerFactory emf = Persistence.createEntityManagerFactory("DefaultPersistenceUnit"); 

. ¿Puede alguna vez proporcionarme el trabajo persistence.xml?

+2

¿El mensaje de error solo dice eso? ¿No tienes un mensaje más detallado y/o un seguimiento de la pila? ¿Tu clase realmente se llama entity.user? –

+1

¿Es su 'hibernate.connection.url' realmente' jdbc: h2:/~ test'? 'jdbc: h2: file: ~/test; IFEXISTS = TRUE' parece más plausible. – trashgod

+1

¿Qué [versión de Hibernate] (http://www.h2database.com/html/tutorial.html#using_hibernate)? – trashgod

Respuesta

9

¿Estás usando Spring? Si es así, puede probar esto siempre que EntityManagerFactory no sea provisto por un contenedor

<bean id="entityManagerFactory" 
     class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean"> 
    <property name="dataSource" ref="dataSource" /> 
    <property name="jpaVendorAdapter"> 
     <bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter"> 
      <property name="generateDdl" value="true" /> 
      <property name="database" value="H2" /> 
     </bean> 
    </property> 
    <property name="persistenceUnitName" value="DefaultPersistenceUnit" /> 
</bean> 

<bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager"> 
    <property name="entityManagerFactory" ref="entityManagerFactory" /> 
</bean> 

<bean id="dataSource" 
     class="org.springframework.jdbc.datasource.DriverManagerDataSource"> 
    <property name="driverClassName" value="org.h2.Driver" /> 
    <property name="url" value="jdbc:h2:database/~test" /> 
    <property name="username" value="sa" /> 
    <property name="password" value="" /> 
</bean> 
+0

Prefiero este enfoque porque es más fácil cambiar los granos para pruebas u otras configuraciones (web o independiente) que cambiar 'persistence.xml'. –

Cuestiones relacionadas