Saya memiliki kelas entitas berikut (di Groovy):
import javax.persistence.Entity
import javax.persistence.Id
import javax.persistence.GeneratedValue
import javax.persistence.GenerationType
@Entity
public class ServerNode {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
Long id
String firstName
String lastName
}
dan persistence.xml saya:
<?xml version="1.0" encoding="UTF-8"?>
<persistence xmlns="http://java.sun.com/xml/ns/persistence" version="1.0">
<persistence-unit name="NewPersistenceUnit">
<provider>org.hibernate.ejb.HibernatePersistence</provider>
<properties>
<property name="hibernate.connection.url" value="jdbc:mysql://localhost:3306/Icarus"/>
<property name="hibernate.connection.driver_class" value="com.mysql.jdbc.Driver"/>
<property name="hibernate.connection.username" value="root"/>
<property name="hibernate.connection.password" value=""/>
<property name="hibernate.archive.autodetection" value="class"/>
<property name="hibernate.show_sql" value="true"/>
<property name="hibernate.format_sql" value="true"/>
<property name="hbm2ddl.auto" value="create"/>
</properties>
<class>net.interaxia.icarus.data.models.ServerNode</class>
</persistence-unit>
</persistence>
dan naskahnya:
import javax.persistence.EntityManager
import javax.persistence.EntityManagerFactory
import javax.persistence.Persistence
import net.interaxia.icarus.data.models.ServerNode
def factory = Persistence.createEntityManagerFactory("NewPersistenceUnit")
def manager = factory.createEntityManager()
manager.getTransaction().begin()
manager.persist new ServerNode(firstName: "Test", lastName: "Server")
manager.getTransaction().commit()
database Icarus ada, tetapi saat ini tidak memiliki tabel. Saya ingin Hibernate secara otomatis membuat dan / atau memperbarui tabel berdasarkan kelas entitas. Bagaimana saya mencapai ini?
Anda dapat mencoba mengubah baris ini di persistence.xml Anda dari
untuk:
Ini dimaksudkan untuk mempertahankan skema agar mengikuti setiap perubahan yang Anda buat pada Model setiap kali Anda menjalankan aplikasi.
Dapatkan ini dari JavaRanch
sumber
Kadang-kadang bergantung pada bagaimana konfigurasi diatur, bentuk panjang dan pendek dari tag properti juga dapat membuat perbedaan.
misalnya jika Anda memilikinya seperti:
coba ubah menjadi:
sumber
Dalam kasus saya, tabel tidak dibuat untuk pertama kalinya tanpa properti terakhir yang tercantum di bawah ini:
menggunakan database H2 dalam memori Wildfly
sumber
Ada satu detail yang sangat penting, yang mungkin dapat menghentikan hibernasi Anda dari membuat tabel (dengan asumsi Anda sudah menyetelnya
hibernate.hbm2ddl.auto
). Anda juga akan membutuhkan@Table
anotasi!Ini telah membantu dalam kasus saya setidaknya 3 kali - masih tidak dapat mengingatnya;)
PS. Baca dokumen hibernasi - dalam banyak kasus Anda mungkin tidak ingin menyetel
hibernate.hbm2ddl.auto
kecreate-drop
, karena ini menghapus tabel Anda setelah menghentikan aplikasi.sumber
Dalam file applicationContext.xml:
sumber
Untuk mendukung jawaban @ thorinkor, saya akan memperluas jawaban saya untuk menggunakan tidak hanya anotasi @Table (name = "table_name") untuk entitas, tetapi juga setiap variabel anak dari kelas entitas harus dianotasi dengan @Column (name = "col_name"). Ini menghasilkan pembaruan yang mulus ke tabel saat dalam perjalanan.
Bagi mereka yang mencari konfigurasi hibernate berbasis kelas Java, aturan ini juga berlaku dalam konfigurasi berbasis java (NewHibernateUtil). Semoga bisa membantu orang lain.
sumber