Właściwość „hbm2ddl.auto” Hibernate z wartością „create” nie tworzy ponownie tabeli

Pracuję nad moimpierwsza prosta aplikacja Hibernate. Istotą problemu jest zmiana nazwy członka klasy trwałej (ze zmianami apt na wszystkie inne części) i ponowne uruchomienie aplikacji. Ponieważ właściwość „hbm2ddl.auto” ma przypisaną wartość „create” w konfiguracji xml, oczekuje się, że Hibernate utworzy nową tabelę przy każdym uruchomieniu, ale tak nie jest. Poniżej znajdują się szczegółowe informacje:

KLASA:

    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 ma między innymi następujący wpis:

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

GŁÓWNA KLASA:

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

Powyższy kod działa zgodnie z oczekiwaniami. Aby przetestować właściwość „hbm2ddl.auto”, zmieniłem element „title” w klasie Event na „title1”. I zaktualizowane metody setter i getter oraz wszystkie odwołania (w mapowaniu klas xml, Event i EventManager). Zgodne bez błędów. Ale gdy próbuję uruchomić aplikację, widzę następujący wyjątek:

Wyjątek w wątku „główny” org.hibernate.exception.SQLGrammarException: Nieznana kolumna „event0_.title1” w „liście pól” w org.hibernate.exception.internal.SQLExceptionTypeDelegate.convert (SQLExceptionTypeDelegate.java:82) w org.hibernate. exception.internal.StandardSQLExceptionConverter.convert (StandardSQLExceptionConverter.java:49) w org.hibernate.engine.jdbc.spi.SqlExceptionHelper.convert (SqlExceptionHelper.java:125) w org.hibernate.engine.jdbc.spi.SqlExceptionHelper.convert ( SqlExceptionHelper.java:110) w org.hibernate.engine.jdbc.internal.proxy.AbstractStatementProxyHandler.continueInvocation (AbstractStatementProxyHandler.java:129) w org.hibernate.engine.jdbc.internal.proxy.AbstractProxyHandler.invoke (AbstractProxyHandler.java: 81) w $ Proxy6.executeQuery (Nieznane źródło) w org.hibernate.loader.Loader.getResultSet (Loader.java:1953) w org.hibernate.loader.Loader.doQuery (Loader.java:829) w org.hibernate. loader.Loader.doQueryAndInitializeNonLazyCollections (Loader.java:289) w org .hibernate.loader.Loader.doList (Loader.java:2438) w org.hibernate.loader.Loader.doList (Loader.java:2424) w org.hibernate.loader.Loader.listIgnoreQueryCache (Loader.java:2254) o org.hibernate.loader.Loader.list (Loader.java:2249) w org.hibernate.loader.hql.QueryLoader.list (QueryLoader.java:470) w org.hibernate.hql.internal.ast.QueryTranslatorImpl.list ( QueryTranslatorImpl.java:355) w org.hibernate.engine.query.spi.HQLQueryPlan.performList (HQLQueryPlan.java:195) w org.hibernate.internal.SessionImpl.list (SessionImpl.java:1248) w org.hibernate.internal .QueryImpl.list (QueryImpl.java:101) w org.hibernate.tutorial.hbm.EventManager.listEvents (EventManager.java:56) w org.hibernate.tutorial.hbm.EventManager.main (EventManager.java:20) Spowodowane przez: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Nieznana kolumna 'event0_.title1' w 'field list' w sun.reflect.NativeConstructorAccessorImpl.newInstance0 (Metoda rodzima) w sun.reflect.NativeConstructorAccessorImpl.newInstance (Nieznana Sou rce) w sun.reflect.DelegatingConstructorAccessorImpl.newInstance (Nieznane źródło) w java.lang.reflect.Constructor.newInstance (Nieznane źródło) w com.mysql.jdbc.Util.handleNewInstance (Util.java:409) w com.mysql. jdbc.Util.getInstance (Util.java:384) w com.mysql.jdbc.SQLError.createSQLException (SQLError.java:1054) w com.mysql.jdbc.MysqlIO.checkErrorPacket (MysqlIO.java:3562) w com.mysql .jdbc.MysqlIO.checkErrorPacket (MysqlIO.java:3494) w com.mysql.jdbc.MysqlIO.sendCommand (MysqlIO.java:1960) w com.mysql.jdbc.MysqlIO.sqlQueryDirect (MysqlIO.java:2114) w com. mysql.jdbc.ConnectionImpl.execSQL (ConnectionImpl.java:2696) w com.mysql.jdbc.PreparedStatement.executeInternal (PreparedStatement.java:2105) w com.mysql.jdbc.PreparedStatement.executeQuery (PreparedStatement.java:2264) w słońcu .reflect.NativeMethodAccessorImpl.invoke0 (Metoda rodzima) w sun.reflect.NativeMethodAccessorImpl.invoke (Nieznane źródło) w sun.reflect.DelegatingMethodAccessorImpl.invoke (Nieznane źródło) w java.lang.reflect.Meth od.invoke (Nieznane źródło) w org.hibernate.engine.jdbc.internal.proxy.AbstractStatementProxyHandler.continueInvocation (AbstractStatementProxyHandler.java:122) ... 16 więcej

Błąd wskazuje klasę EventManager w następującej linii:

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

Ponieważ właściwość „hbm2ddl.auto” ma przypisaną wartość „create” w konfiguracji xml, oczekuje się, że Hibernate utworzy nową tabelę przy każdym uruchomieniu, ale tak się nie dzieje. Pomóż rozwiązać problem.

Z góry dziękuję.

questionAnswers(2)

yourAnswerToTheQuestion