配置Hibernate以适应现有数据库约束?

时间:2013-07-25 02:06:48

标签: java hibernate jpa indexing ddl

最近几天我卷起袖子,第一次挖到Hibernate。我很惊讶地发现Hibernate的默认行为是实际驱动数据库本身的DDL:

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

这与我习惯的相反,有人(通常是DBA)创建数据库结构:模式,表,键约束,索引,触发器等;然后我(开发人员)编写我的应用程序以遵守这些限制。

这引发了一些类似的相关问题:

  1. 如何与基于Hibernate的应用程序一起创建/维护索引?选择你最喜欢的关系数据库 - MySQL,Postgres,Oracle,等等。你是通过Hibernate指定索引(如果是,如何),或者你必须在数据库中指定它们(如果是这样,你如何让Hibernate尊重这些索引而不是覆盖它们?)
  2. 与上面的#1相同的问题,但是使用多列密钥而不是索引。
  3. 如何在Hibernate中指定列顺序?它只是基于实体内部Java字段的顺序吗?那么Hibernate添加的列(比如何时进行连接或实现继承策略)?
  4. 如果我在Hibernate创建的表上安装触发器,如何防止Hibernate覆盖/删除它?
  5. 如何指定创建Hibernate表的数据库/模式?
  6. 提前致谢!

1 个答案:

答案 0 :(得分:0)

  1. 您可以在实体字段中使用@Index注释
  2. 请参阅此问题/答案:How to define index by several columns in hibernate entity?
  3. 是的,它只是基于实体中的Java字段的顺序
  4. 您可以将hbm2ddl.auto设置为“validate”,使其只是验证您的架构,而不进行任何更新。
  5. 您可以使用@Table(name = "..")注释指定实体/表格的自定义名称