Hibernasi tidak menyimpan data di H2 JBoss 7.1.1

Saat ini saya sedang mengerjakan JBoss 7.1.1 dengan JPA (dengan Hibernate) dan Spring. Saya memiliki @Transactional musim semi untuk mengurus Transaksi. Saat ini saya menggunakan H2 database internal JBoss 7.1.1. Semua transaksi berfungsi dengan baik saat server aktif. Namun setelah saya mematikan server saya, semua perubahan yang dilakukan pada kacang entitas tidak disimpan dalam file database H2 saat server JBoss dimulai ulang. Setelah server JBoss dimatikan, ketika saya terhubung ke database H2 menggunakan file, saya melihat bahwa skema telah dibuat tetapi data tidak disimpan.

Saya merasa ini bukan masalah pada kode saya tetapi beberapa konfigurasi karena berfungsi dengan baik saat aplikasi berjalan.

Ini ketekunan.xml saya:

<?xml version="1.0" encoding="UTF-8"?>
<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="myappname" transaction-type="JTA">
        <jta-data-source>java:/DefaultDS</jta-data-source>
        <properties>
            <property name="hibernate.dialect" value="org.hibernate.dialect.H2Dialect" />
            <property name="hibernate.hbm2ddl.auto" value="update" />
            <property name="jboss.entity.manager.factory.jndi.name" value="java:app/myappname"/>
        </properties>
    </persistence-unit>

</persistence>

Sumber data di standalone.xml:

<datasource jta="true" jndi-name="java:/DefaultDS" pool-name="DefaultDS" enabled="true" use-java-context="true">
    <connection-url>jdbc:h2:file:${jboss.server.data.dir}${/}h2${/}localDB</connection-url>
    <driver>h2</driver>
    <pool>
        <min-pool-size>5</min-pool-size>
        <max-pool-size>20</max-pool-size>
    </pool>
    <security>
        <user-name>sa</user-name>
    </security>
    <timeout>
        <idle-timeout-minutes>0</idle-timeout-minutes>
    </timeout>
    <statement>
        <prepared-statement-cache-size>32</prepared-statement-cache-size>
    </statement>
</datasource>

Bagaimana saya bisa membuat ini berfungsi?

Terima kasih sebelumnya


person Chris    schedule 18.09.2012    source sumber
comment
Saya tidak yakin, tetapi bisakah Anda mencoba menerapkan jalur absolut, menurut saya itu adalah jdbc:h2:file:/${jboss.server.data.dir}/h2/localDB atau mungkin jdbc:h2:file:${/}${jboss.server.data.dir}${/}h2${/}localDB (tidak yakin apakah/mengapa ${/} perlu digunakan, bukan hanya /).   -  person Thomas Mueller    schedule 18.09.2012
comment
@ThomasMueller Terima kasih atas balasannya. Lupa mengabarimu. Saya mencoba apa yang Anda sarankan. Sepertinya tidak berhasil :-(   -  person Chris    schedule 18.09.2012
comment
Saya masih berpikir URL database adalah masalahnya. Saya akan menguji dengan URL database yang sepenuhnya di-hardcode, misalnya: jdbc:h2:file:/data/jboss/h2/localDB.   -  person Thomas Mueller    schedule 18.09.2012


Jawaban (2)


Satu-satunya hal yang tampak tidak biasa tentang konfigurasi persistence.xml dan sumber data yang ditampilkan adalah jalur basis data, namun, saya telah mencoba konfigurasi Anda di JBoss AS 7.1.1 dengan jalur basis data yang serupa dan saya tidak dapat mereplikasi masalahnya. Saya pasti dapat mengakses data yang disimpan oleh aplikasi, bahkan setelah server di-restart atau dimatikan. Namun, aplikasi saya tidak menggunakan Spring; mungkin masalahnya terletak pada konfigurasi Spring, atau di tempat lain? Apakah Anda yakin Anda terhubung ke file database H2 yang sama dengan yang digunakan aplikasi Anda?

person Katie J. Ots    schedule 24.09.2012

di file hibernate.cfg.xml yang seharusnya Anda miliki

<property name="hibernate.hbm2ddl.auto">create</property>

daripada buat yang selalu menghapus dan membuat ulang tabel, gunakan validasi.

<property name="hibernate.hbm2ddl.auto">validate</property>
person Sebastian Brestin    schedule 02.08.2014