hibernate table does not exist error
在配置hibernate.cfg.xml中,我添加
当我运行应用程序时,Hibernate会自动创建表。 但是,我通过运行drop table sql手动从数据库中删除表。 然后再次运行hibernate应用程序。 出现异常
Caused by: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Table 'test.person' doesn't exist
解决问题的唯一方法是重启Mysql数据库。 谁能为我解释这个问题?
这是我的hibernate.cfg.xml
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 | <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's 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 | <property name="hibernate.hbm2ddl.auto">update</property> |
如果模式不存在,则创建模式,并尝试修改现有模式以匹配您定义的映射。
另外,请阅读有关所有可能值的问题。
请更改以下代码:
至 :
试试吧。
"财产"和"名称"之间是否有空格?
1 | <propertyname="hibernate.hbm2ddl.auto">create</property> |
如果没有,那么这可能就是问题所在。另外,当你"重新启动MySQL数据库"时,你的意思是什么?这是否意味着您只需重新启动MySQL服务器,或者这意味着您需要手动重新创建表?此外,如果上面的XML摘录确实包含"property"和"name"之间的空格,请同时提供hibernate日志的除外,特别是它列出了它标识的所有属性的部分。
请更改以下代码:
1 | <property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property> |
至 :
1 | <property name="hibernate.dialect">org.hibernate.dialect.MySQL5Dialect</property> |
试试吧。它确实适用于我的情况。
我有同样的问题。我观察到我使用auto_increment(我使用MySQL Dialect)作为String字段。我把它改成了int来解决问题
org.hibernate.dialect.MySQLDialect
在mySQL数据库的情况下,必须将dialect属性更改为以下内容:
org.hibernate.dialect.MySQL5Dialect
默认情况下,它与MySQLDialect一起提供,不支持MySQL数据库配置的InnoDB存储引擎,这是在默认架构中创建表的默认设置。