Hibernate table не существует ошибка

В конфигурации hibernate.cfg.xml, я добавляю <property name="hibernate.hbm2ddl.auto">create</property> Hibernate автоматически создает таблицу при запуске приложения. Однако я удаляю таблицу из базы данных вручную, запустив таблицу drop sql. Затем запустите приложение спящего режима. Исключением является

Вызвано: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: таблица "test.person" не существует

Единственный способ исправить проблему - перезапустить базу данных Mysql. Может ли кто-нибудь объяснить эту проблему для меня?

это мой hibernate.cfg.xml

<hibernate-configuration>  
<session-factory>  
    <property name="hibernate.connection.driver_class">  
        com.mysql.jdbc.Driver  
    </property>  
    <property name="hibernate.connection.url">  
        jdbc:mysql://localhost/test
    </property>  
    <property name="connection.username">root</property>  
    <property name="connection.password">root</property>  
    <property name="dialect">  
        org.hibernate.dialect.MySQLDialect  
    </property>  


    <!-- Drop and re-create the database schema on startup -->
    <property name="hibernate.hbm2ddl.auto">create</property>  

    <!-- Enable Hibernate automatic session context management -->
    <property name="current_session_context_class">thread</property>

    <!-- Disable the second-level cache  -->
    <property name="cache.provider_class">org.hibernate.cache.NoCacheProvider</property>

    <!-- Echo all executed SQL to stdout -->
    <property name="show_sql">true</property>

    <!-- Mapping files -->  
    <mapping resource="com/mapping/Event.hbm.xml" />  
    <mapping resource="com/mapping/Person.hbm.xml"/>
</session-factory>  

спасибо

Ответ 1

Я не верю, что использование create обновит схему на месте, чтобы повторно добавить таблицу, которую вы уронили. Попробуйте:

<property name="hibernate.hbm2ddl.auto">update</property>

Это создаст схему, если она не существует, и попытайтесь изменить существующую, чтобы она соответствовала указанному вами сопоставлению.

Кроме того, прочитайте этот вопрос обо всех возможных значениях.

Ответ 2

пожалуйста, измените код с :

<property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>

к :

<property name="hibernate.dialect">org.hibernate.dialect.MySQL5Dialect</property>

попытайся.

Ответ 3

Есть ли пробел между "свойством" и "именем"?

<propertyname="hibernate.hbm2ddl.auto">create</property>

Если нет, то это, вероятно, проблема. Кроме того, что вы подразумеваете, что он исправляет, когда вы "перезагружаете базу данных MySQL"? Означает ли это, что вы просто перезапускаете сервер MySQL, или это означает, что вам нужно вручную воссоздать таблицу? Кроме того, если вырезка XML выше действительно содержит пробел между "свойством" и "именем", укажите также за исключением журналов спящего режима, особенно часть, в которой перечислены все свойства, которые она идентифицировала.

Ответ 4

У меня была такая же проблема. Я заметил, что я использовал auto_increment (я использовал MySQL Dialect) для поля String. Я изменил его на int, который решил проблему

Ответ 5

Пожалуйста, измените код с :

<property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>

к :

<property name="hibernate.dialect">org.hibernate.dialect.MySQL5Dialect</property>

Попытайся. Это действительно сработало в моем случае.

Ответ 6

org.hibernate.dialect.MySQLDialect

в случае базы данных mySQL свойство диалекта должно быть изменено на следующее:

org.hibernate.dialect.MySQL5Dialect

по умолчанию он поставляется с MySQLDialect with, который не поддерживается движком InnoDB Storage конфигурации базы данных MySQL, которая используется по умолчанию для создания таблицы в схеме Default.