Hibernate配置hbm2ddl.auto

时间:2015-08-29 16:46:30

标签: java database hibernate configuration mapping

我有这样的hibernate.cfg.xml:

<hibernate-configuration>
<session-factory>
<property name="connection.url">jdbc:postgresql://host:5432/app-dev</property>
<property name="connection.driver_class">org.postgresql.Driver</property>
<property name="hbm2ddl.auto">validate</property>
...many mappings
</session-factory>

问题是它正在尝试更新我的数据库架构,但我想禁用该功能。

从我的应用程序中记录:

2015-08-29 16:29:57 ERROR SchemaUpdate:261 - HHH000388: Unsuccessful: create table myschema.public.mytable (id int4 not null, count int4, anotherid int4, onemoreid int4, primary key (id))
2015-08-29 16:29:58 ERROR SchemaUpdate:262 - ERROR: syntax error at or near "-"          <<(mydatabase name contains "-" sign)

职位:27

我还尝试将hbm2ddl.auto标记留空或在其中包含'none'值。

3 个答案:

答案 0 :(得分:2)

完全删除属性<property name="hbm2ddl.auto">validate</property>

默认情况下,所有选项都将为false,而hibernate将不会尝试进行任何更新。

答案 1 :(得分:0)

删除Hibernate hbm2ddl.auto默认为Hibernate没有做任何事情。

来自docs

  

hbm2ddl.auto选项打开自动生成数据库   模式直接进入数据库。这也可以关闭   删除配置选项,或使用重定向到文件   SchemaExport Ant任务的帮助。

答案 2 :(得分:0)

Validate是hbm2ddl.auto的默认属性,即使你没有指定hbm2ddl.auto属性,它也是默认的validate。其次没有“无”这样的价值,只有4种选择:

  1. validate-它只是检查表及其列是否存在于数据库中,或者是否存在表,如果表不存在或任何列不存在而不是抛出异常。

  2. create - 如果值为create而不是hibernate,则删除该表(如果已经存在),然后创建一个新表并执行该操作,这不会实时使用,因为旧数据会从数据库中丢失。 / p>

  3. update - 如果值是更新,则hibernate使用现有表,如果表不存在,则创建新表并执行操作。这主要是经常实时使用,建议使用。

  4. create-drop - 如果值为create-drop而不是hibernate创建一个新表,并且在执行操作后删除了表,则在测试hibernate代码时使用该值。

  5. 由于 Njoy Coding