我正在处理我的 first simple Hibernate application 。问题的关键是,我重命名了持久类的一个成员(对所有其他部分进行了适当的更改)并重新运行了应用程序。由于 'hbm2ddl.auto' 属性在配置 xml 中被分配了 'create' 值,Hibernate 期望在每次运行时创建新表,但它并没有这样做。以下是详细信息:

类(class):

    public class Event {
    private Long id;

    private String title;
    private Date date;

    public Event() {
        // this form used by Hibernate
    }

    public Event(String title, Date date) {
        // for application use, to create new events
        this.title = title;
        this.date = date;
    }

    public Long getId() {
        return id;
    }

    private void setId(Long id) {
        this.id = id;
    }

    public Date getDate() {
        return date;
    }

    public void setDate(Date date) {
        this.date = date;
    }

    public String getTitle() {
        return title;
    }

    public void setTitle(String title) {
        this.title = title;
    }
}

事件.hbm.xml:
<hibernate-mapping package="org.hibernate.tutorial.hbm">

<class name="Event" table="EVENTS">
    <id name="id" column="EVENT_ID">
        <generator class="increment"/>
    </id>
    <property name="date" type="timestamp" column="EVENT_DATE"/>
    <property name="title"/>
</class>

hibernate.cfg.xml 等包含以下条目:
<property name="hbm2ddl.auto">create</property>

主要类(class):
public class EventManager {

public static void main(String[] args) {

    EventManager mgr = new EventManager();

    List events = mgr.listEvents();
for (int i = 0; i < events.size(); i++) {
    Event theEvent = (Event) events.get(i);
        System.out.println( "Event: " + theEvent.getTitle() + " Time: " + theEvent.getDate() );
    }

    HibernateUtil.getSessionFactory().close();

}

private List listEvents() {
    Session session = HibernateUtil.getSessionFactory().getCurrentSession();
    session.beginTransaction();
    List result = session.createQuery("from Event").list();
    session.getTransaction().commit();
    return result;
} }

上面的代码按预期工作。只是为了测试“hbm2ddl.auto”属性,我将事件类中的“title”成员更改为“title1”。并且,更新了 setter 和 getter 方法以及所有引用(在映射 xml、Event 和 EventManager 类中)。遵守没有错误。但是,当我尝试运行该应用程序时,我看到以下异常:



错误指向以下行的 EventManager 类:
List result = session.createQuery("from Event").list();

由于 'hbm2ddl.auto' 属性在配置 xml 中被分配了 'create' 值,Hibernate 期望在每次运行时创建新表,但它并没有这样做。请帮助解决问题。

提前致谢。

最佳答案

尝试指定 hibernate.hbm2ddl.auto=create 而不仅仅是 hbm2ddl.auto=create

这就是 documentation 使用的。

关于Hibernate 的 'hbm2ddl.auto' 属性值为 'create' 不会重新创建表,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/10778755/

10-10 20:21