如何在JPA中将数据库用作数据库源

时间:2016-09-22 00:52:35

标签: java postgresql jpa wildfly

我是在JBoss开发应用程序的新手,因此我特别关注制作Ticket Monster的教程。目前,我已经创建了一个Event JPA Entity,并且在运行中,它显示我可以保存一个事件。但是当我重新启动计算机时,似乎已经保存的事件丢失了,所以研究它并找到有关内存数据库的一些信息。我的问题是如何告诉/配置我的项目不使用内存数据库,而是使用典型的数据库,所以每次重新启动计算机时,数据都在数据库中。我想将PostgreSQL用于我的数据库。我当前设置为JPA的数据源配置文件是TestDB,但我的persistence.xml的数据源是

<persistence version="2.1"
   xmlns="http://xmlns.jcp.org/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
   xsi:schemaLocation="
        http://xmlns.jcp.org/xml/ns/persistence
        http://xmlns.jcp.org/xml/ns/persistence/persistence_2_1.xsd">
   <persistence-unit name="primary">
      <!-- If you are running in a production environment, add a managed 
         data source, this example data source is just for development and testing! -->
      <!-- The datasource is deployed as WEB-INF/ticket-monster-ds.xml, you
         can find it in the source at src/main/webapp/WEB-INF/ticket-monster-ds.xml -->
      <jta-data-source>java:jboss/datasources/ticket-monsterDS</jta-data-source>
      <properties>
         <!-- Properties for Hibernate -->
         <property name="hibernate.hbm2ddl.auto" value="create-drop" />
         <property name="hibernate.show_sql" value="false" />
      </properties>
   </persistence-unit>
</persistence>

它说<jta-data-source>java:jboss/datasources/ticket-monsterDS</jta-data-source>不是TestDB。此外,我不想使用create-drop,而是可以判断数据库中是否存在某些内容但不删除但使用它的值,或者如果不存在则创建。

更新

Heres my ticket-monster-ds.xml

<datasources xmlns="http://www.jboss.org/ironjacamar/schema"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://www.jboss.org/ironjacamar/schema http://docs.jboss.org/ironjacamar/schema/datasources_1_0.xsd">
    <!-- The datasource is bound into JNDI at this location. We reference 
        this in META-INF/persistence.xml -->
    <datasource jndi-name="java:jboss/datasources/ticket-monsterDS"
        pool-name="ticket-monster" enabled="true"
        use-java-context="true">
        <connection-url>jdbc:h2:mem:ticket-monster;DB_CLOSE_ON_EXIT=FALSE;DB_CLOSE_DELAY=-1</connection-url>
        <driver>h2</driver>
        <security>
            <user-name>sa</user-name>
            <password>sa</password>
        </security>
    </datasource>
</datasources>

2 个答案:

答案 0 :(得分:1)

您可以继续使用示例中的H2数据库。 H2可以配置为写入文件。您只需要更改连接字符串即可。

例如。 <connection-url>jdbc:h2:~/test;<connection-url>

有关更多选项,请参阅H2 documentation

答案 1 :(得分:0)

因此,在我发布在jboss论坛上,这里是链接Wildfly 10: Cannot upload deployment后,Wolfgang Mayer回答说我不应该多次声明数据源。这是迈出的一步。

1.您可以通过管理控制台(localhost:9990)或通过项目(* - ds.xml),不是两者设置数据源。请记住数据源的JNDI(Java命名和目录接口)。

实施例: Datasource Name:PostgresDS JNDI:java:/PostgresDS Connection URL: jdbc:postgresql://host:port/databasename

2.告诉您的项目或战争,以使用您创建的数据源。编辑pesistence.xml并放入数据源的JNDI。

示例:

<?xml version="1.0" encoding="UTF-8"?>
<persistence version="2.1"
   xmlns="http://xmlns.jcp.org/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
   xsi:schemaLocation="
        http://xmlns.jcp.org/xml/ns/persistence
        http://xmlns.jcp.org/xml/ns/persistence/persistence_2_1.xsd">
   <persistence-unit name="primary">
      <jta-data-source>java:/PostgresDS</jta-data-source>
      <properties>
         <!-- Properties for Hibernate -->
         <property name="hibernate.hbm2ddl.auto" value="create-drop" />
         <property name="hibernate.show_sql" value="false" />
      </properties>
   </persistence-unit>
</persistence>

3.(可选)如果您在管理控制台中创建了数据源,请删除项目文件夹中的* -ds.xml文件,以防止&#34;数据源已注册&#34;错误。