2011-08-06 136 views
8

我正在用JPA項目開發hibernate,並嘗試使用H2(嵌入式數據庫)來獲取工作的persistence.xml。JPA與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> 

但我這是行不通的,總是我收到錯誤

「無法創建EntityManagerFactory的」

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

。 anyonw能否爲我提供工作的persistence.xml?

+2

錯誤消息是否僅表明?你沒有更詳細的消息和/或堆棧跟蹤嗎?你的類是否真的命名爲entity.user? –

+1

你的'hibernate.connection.url'真的是'jdbc:h2:/〜test'嗎? 'jdbc:h2:file:〜/ test; IFEXISTS = TRUE'似乎更合理。 – trashgod

+1

什麼[Hibernate版本](http://www.h2database.com/html/tutorial.html#using_hibernate)? – trashgod

回答

9

你在使用Spring嗎?如果是這樣,只要EntityManagerFactory不是由容器提供,就可以嘗試此操作。

<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

我更喜歡這種方法,因爲將bean更換爲測試或其他配置(web或standalone)比切換出'persistence.xml'更容易。 –