ไฮเบอร์เนตไม่บันทึกข้อมูลใน H2 ของ JBoss 7.1.1

ขณะนี้ฉันกำลังทำงานกับ JBoss 7.1.1 กับ JPA (พร้อม Hibernate) และ Spring ฉันมี @Transactional ของสปริงเพื่อดูแลธุรกรรม ขณะนี้ฉันกำลังใช้ H2 database ภายในของ JBoss 7.1.1 ธุรกรรมทั้งหมดทำงานได้ดีเมื่อเซิร์ฟเวอร์ทำงาน แต่เมื่อฉันปิดเซิร์ฟเวอร์ การเปลี่ยนแปลงทั้งหมดที่ทำกับเอนทิตี bean จะไม่ถูกบันทึกในไฟล์ฐานข้อมูล H2 บน รีสตาร์ทเซิร์ฟเวอร์ JBoss หลังจากที่เซิร์ฟเวอร์ JBoss ปิดตัวลง เมื่อฉันเชื่อมต่อกับฐานข้อมูล H2 โดยใช้ไฟล์ ฉันเห็นว่าสคีมาถูกสร้างขึ้น แต่ข้อมูลไม่ได้รับการบันทึก

ฉันรู้สึกว่านี่ไม่ใช่ปัญหากับโค้ดของฉัน แต่เป็นการกำหนดค่าบางอย่าง เนื่องจากทำงานได้ดีเมื่อแอปพลิเคชันทำงาน

นี่คือ Peristence.xml ของฉัน:

<?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>

แหล่งข้อมูลใน 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>

ฉันจะทำให้สิ่งนี้ทำงานได้อย่างไร?

ขอบคุณล่วงหน้า


person Chris    schedule 18.09.2012    source แหล่งที่มา
comment
ฉันไม่แน่ใจ แต่คุณลองบังคับใช้เส้นทางที่แน่นอนได้ไหม ฉันคิดว่านั่นจะเป็น jdbc:h2:file:/${jboss.server.data.dir}/h2/localDB หรืออาจจะเป็น jdbc:h2:file:${/}${jboss.server.data.dir}${/}h2${/}localDB (ไม่แน่ใจว่า / เพราะเหตุใด ${/} จึงจำเป็นต้องใช้แทนเพียงแค่ /)   -  person Thomas Mueller    schedule 18.09.2012
comment
@ThomasMueller ขอบคุณสำหรับคำตอบ ลืมอัปเดตคุณ ฉันลองสิ่งที่คุณแนะนำแล้ว ดูเหมือนจะไม่ทำงาน :-(   -  person Chris    schedule 18.09.2012
comment
ฉันยังคงคิดว่า URL ฐานข้อมูลเป็นปัญหา ฉันจะทดสอบด้วย URL ฐานข้อมูลแบบฮาร์ดโค้ดเต็มรูปแบบ เช่น: jdbc:h2:file:/data/jboss/h2/localDB   -  person Thomas Mueller    schedule 18.09.2012


คำตอบ (2)


สิ่งเดียวที่ดูผิดปกติเกี่ยวกับการกำหนดค่าคงอยู่.xml และแหล่งข้อมูลที่แสดงคือเส้นทางฐานข้อมูล อย่างไรก็ตาม ฉันได้ลองกำหนดค่าของคุณบน JBoss AS 7.1.1 ด้วยเส้นทางฐานข้อมูลที่คล้ายกันแล้ว และฉันไม่สามารถจำลองปัญหาซ้ำได้ ฉันสามารถเข้าถึงข้อมูลที่แอปพลิเคชันเก็บไว้ได้อย่างแน่นอน แม้ว่าเซิร์ฟเวอร์จะรีสตาร์ทหรือปิดตัวลงแล้วก็ตาม อย่างไรก็ตาม แอปพลิเคชันของฉันไม่ได้ใช้ Spring บางทีปัญหาอาจอยู่ที่การกำหนดค่า Spring หรือที่อื่น? คุณแน่ใจหรือไม่ว่าคุณกำลังเชื่อมต่อกับไฟล์ฐานข้อมูล H2 เดียวกันกับที่แอปพลิเคชันของคุณใช้อยู่

person Katie J. Ots    schedule 24.09.2012

ในไฟล์ hibernate.cfg.xml ของคุณที่คุณควรมี

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

แทนที่จะ สร้าง ซึ่งจะดรอปและสร้างตารางใหม่เสมอให้ใช้ ตรวจสอบ

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