Die Eigenschaft 'hbm2ddl.auto' von Hibernate mit dem Wert 'create' erstellt die Tabelle nicht neu

Ich arbeite an meinemerste einfache Hibernate-Anwendung. Der Kern des Problems ist, dass ich ein Mitglied der persistenten Klasse umbenannt habe (mit entsprechenden Änderungen an allen anderen Teilen) und die Anwendung erneut ausführe. Da der Eigenschaft 'hbm2ddl.auto' in der Konfigurations-XML der Wert 'create' zugewiesen wird, wird erwartet, dass Hibernate bei jedem Durchlauf eine neue Tabelle erstellt, dies ist jedoch nicht der Fall. Nachfolgend finden Sie detaillierte Informationen:

KLASSE:

    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;
    }
}

Event.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 hat unter anderem folgenden Eintrag:

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

HAUPTKLASSE:

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;
} }

Der obige Code funktioniert wie erwartet. Um die Eigenschaft "hbm2ddl.auto" zu testen, habe ich das Mitglied "title" in der Ereignisklasse in "title1" geändert. Und aktualisierte Setter- und Getter-Methoden und alle Referenzen (in Mapping-XML, Event und EventManager-Klasse). Erfüllt keine Fehler. Wenn ich jedoch versuche, die Anwendung auszuführen, wird die folgende Ausnahme angezeigt:

Ausnahme im Thread "main" org.hibernate.exception.SQLGrammarException: Unbekannte Spalte 'event0_.title1' in 'field list' unter org.hibernate.exception.internal.SQLExceptionTypeDelegate.convert (SQLExceptionTypeDelegate.java:82) unter org.hibernate. ausnahme.intern.StandardSQLExceptionConverter.convert (StandardSQLExceptionConverter.java:49) bei org.hibernate.engine.jdbc.spi.SqlExceptionHelper.convert (SqlExceptionHelper.java:125) bei org.hibernate.engine.jdbc.spi SqlExceptionHelper.java:110) bei org.hibernate.engine.jdbc.internal.proxy.AbstractStatementProxyHandler.continueInvocation (AbstractStatementProxyHandler.java:129) bei org.hibernate.engine.jdbc.internal.proxy.andractinbstinbstinc. 81) bei $ Proxy6.executeQuery (Unknown Source) bei org.hibernate.loader.Loader.getResultSet (Loader.java:1953) bei org.hibernate.loader.Loader.doQuery (Loader.java:829) bei org.hibernate. loader.Loader.doQueryAndInitializeNonLazyCollections (Loader.java:289) bei org .hibernate.loader.Loader.doList (Loader.java:2438) um ​​org.hibernate.loader.Loader.doList (Loader.java:2424) um org.hibernate.loader.Loader.listIgnoreQueryCache (Loader.java:2254) um org.hibernate.loader.Loader.list (Loader.java:2249) at org.hibernate.loader.hql.QueryLoader.list (QueryLoader.java:470) at org.hibernate.hql.internal.ast.QueryTranslatorImpl.list ( QueryTranslatorImpl.java:355) um org.hibernate.engine.query.spi.HQLQueryPlan.performList (HQLQueryPlan.java:195) um org.hibernate.internal.SessionImpl.list (SessionImpl.java:1248) um ​​org.hibernate.internal .QueryImpl.list (QueryImpl.java:101) at org.hibernate.tutorial.hbm.EventManager.listEvents (EventManager.java:56) at org.hibernate.tutorial.hbm.EventManager.main (EventManager.java:20) Verursacht by: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Unbekannte Spalte 'event0_.title1' in 'field list' bei sun.reflect.NativeConstructorAccessorImpl.newInstance0 (Native Method) bei sun.reflect.NativeCon (UnknownInstructorAstructor) rce) bei sun.reflect.DelegatingConstructorAccessorImpl.newInstance (Unbekannte Quelle) bei java.lang.reflect.Constructor.newInstance (Unbekannte Quelle) bei com.mysql.jdbc.Util.handleNewInstance (Util.java:409) bei com.mysql. jdbc.Util.getInstance (Util.java:384) at com.mysql.jdbc.SQLError.createSQLException (SQLError.java:1054) at com.mysql.jdbc.MysqlIO.checkErrorPacket (MysqlIO.java: 35 .jdbc.MysqlIO.checkErrorPacket (MysqlIO.java:3494) at com.mysql.jdbc.MysqlIO.sendCommand (MysqlIO.java:1960) at com.mysql.jdbc.MysqlIO.sqlQueryDirect.jd mysql.jdbc.ConnectionImpl.execSQL (ConnectionImpl.java:2696) unter com.mysql.jdbc.PreparedStatement.executeInternal (PreparedStatement.java:2105) unter com.mysql.jdbc.PreparedStatement.executeQuery (PreparedStat) .reflect.NativeMethodAccessorImpl.invoke0 (Native Method) bei sun.reflect.NativeMethodAccessorImpl.invoke (Unknown Source) bei sun.reflect.DelegatingMethodAccessorImpl.invoke (Unknown Source) bei java.lang.reflect.Meth od.invoke (Unknown Source) at org.hibernate.engine.jdbc.internal.proxy.AbstractStatementProxyHandler.continueInvocation (AbstractStatementProxyHandler.java:122) ... 16 more

Der Fehler zeigt in der folgenden Zeile auf die EventManager-Klasse:

List result = session.createQuery("from Event").list();

Da der Eigenschaft 'hbm2ddl.auto' in der Konfigurations-XML der Wert 'create' zugewiesen wird, wird erwartet, dass Hibernate bei jedem Durchlauf eine neue Tabelle erstellt, dies ist jedoch nicht der Fall. Bitte helfen Sie, das Problem zu lösen.

Danke im Voraus.

Antworten auf die Frage(2)

Ihre Antwort auf die Frage