У меня есть следующий класс сущности (в 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
}
и мой persistence.xml:
<?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>
и сценарий:
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()
база данных Icarus существует, но в настоящее время не имеет таблиц. Я хотел бы, чтобы Hibernate автоматически создавал и / или обновлял таблицы на основе классов сущностей. Как бы я этого добился?
Вы можете попробовать изменить эту строку в своем persistence.xml с
кому:
Это должно поддерживать схему, чтобы отслеживать любые изменения, которые вы вносите в Модель при каждом запуске приложения.
Получил это с JavaRanch
источник
Иногда, в зависимости от того, как задана конфигурация, длинная и краткая формы тега свойства также могут иметь значение.
например, если у вас есть это как:
попробуйте изменить его на:
источник
В моем случае таблица не была создана в первый раз без последнего свойства, указанного ниже:
используется база данных H2 в памяти Wildfly
источник
Есть одна очень важная деталь, которая может помешать вашей гибернации генерировать таблицы (при условии, что вы уже установили
hibernate.hbm2ddl.auto
). Также вам понадобится@Table
аннотация!В моем случае это уже помогло минимум 3 раза - до сих пор не могу вспомнить;)
PS. Прочтите документацию по спящему режиму - в большинстве случаев вы, вероятно, не захотите устанавливать
hibernate.hbm2ddl.auto
егоcreate-drop
, потому что он удаляет ваши таблицы после остановки приложения.источник
В файле applicationContext.xml:
источник
В поддержку ответа @thorinkor я бы расширил свой ответ, чтобы использовать не только аннотацию @Table (name = "table_name") для объекта, но также каждую дочернюю переменную класса объекта следует аннотировать с помощью @Column (name = "col_name"). Это приводит к плавному обновлению таблицы на ходу.
Для тех, кто ищет конфигурацию гибернации на основе классов Java, правило применяется также и в конфигурациях на основе Java (NewHibernateUtil). Надеюсь, это поможет кому-то другому.
источник