2010-09-27 52 views
20

我有一个在内存中的数据源:使用HSQL的内存数据库作为数据源JPA

java.sql.Connection c = DriverManager.getConnection("jdbc:hsqldb:mem:testdb", "sa", "");    
emf = Persistence.createEntityManagerFactory("manager"); 

但现在我卡住了。我想将它用作J2SE应用程序中的JPA数据源。我浏览了整个网页,但所有信息都与J2EE相关。

<persistence xmlns="http://java.sun.com/xml/ns/persistence" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd" 
    version="2.0"> 

    <persistence-unit name="manager"> 

     <jta-data-source>/*What to enter here?*/</jta-data-source> 

     <properties> 

      <property name="hibernate.dialect" value="org.hibernate.dialect.HSQLDialect" /> 
      <property name="hibernate.hbm2ddl.auto" value="create-drop" /> 

     </properties> 

    </persistence-unit> 

</persistence> 

回答

55

/*什么进入这里?*/

好了,什么都没有。在Java SE环境中,您必须使用来自JPA提供商的内置连接池,设置如下所示:

<persistence xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd" version="2.0"> 
    <persistence-unit name="manager" transaction-type="RESOURCE_LOCAL"> 
    <provider>org.hibernate.ejb.HibernatePersistence</provider> 
    <class>com.acme.Foo</class> 
    ... 
    <properties> 
     <property name="javax.persistence.jdbc.driver" value="org.hsqldb.jdbcDriver"/> 
     <property name="javax.persistence.jdbc.url" value="jdbc:hsqldb:mem:testdb"/> 
     <property name="javax.persistence.jdbc.user" value="sa"/> 
     <property name="javax.persistence.jdbc.password" value=""/> 
     <property name="hibernate.dialect" value="org.hibernate.dialect.HSQLDialect"/> 
     <property name="hibernate.hbm2ddl.auto" value="update"/> 
    </properties> 
    </persistence-unit> 
</persistence> 
+0

谢谢,它的工作原理。我现在有另一个问题:http://stackoverflow.com/questions/3805478/internal-hsql-database-complains-about-privileges – 2010-09-27 15:50:37

+0

@Bart不客气。 – 2010-09-27 16:05:06

+1

@Bart BTW,认识一个好答案的常用方法是对它进行upvoting;)请参阅[接受答案没有upvoting?](http://meta.stackexchange.com/questions/686/accepting-answer-without-upvoting)。 – 2010-09-27 16:06:20