hibernate表不存在错误

hibernate table does not exist error

在配置hibernate.cfg.xml中,我添加
create
当我运行应用程序时,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>

谢谢


我不相信使用create将更新就地模式以重新添加您删除的表。尝试:

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

如果模式不存在,则创建模式,并尝试修改现有模式以匹配您定义的映射。

另外,请阅读有关所有可能值的问题。


请更改以下代码:

org.hibernate.dialect.MySQLDialect

至 :

org.hibernate.dialect.MySQL5Dialect

试试吧。


"财产"和"名称"之间是否有空格?

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存储引擎,这是在默认架构中创建表的默认设置。