2009-10-30 31 views
2

众所周知,hibernate以非常奇怪的方式处理索引。只有从头开始创建数据库模式时才会生成它们。但是如果你尝试更新数据库模式,hibernate会忽略新的索引。Hibernate用新索引更新数据库结构

我的问题是,是否有人找到一个解决方案如何在模式更新期间要求hibernate为新索引生成SQL。我想与Stefan Steinegger不同意。使用Hibernate进行索引管理是一件痛苦的事情。很高兴看到该功能计划用于下一个版本(3.5.x),并且将向后兼容3.3.x和3.2.x。详细信息是here

+0

你当然可以不同意斯蒂芬,但他绝对是对​​的。 Hibernate架构更新只给你非常基础的东西。当涉及索引/辅助对象(触发器/存储特效/等...),**改变**列,约束等等,它不会有任何帮助。有适当的工具,Hibernate架构更新不是其中之一。 Сокироюцвяхинезабивають:-) – ChssPly76 2009-10-30 16:36:02

+0

Thanx ChssPly76。我很欣赏你的观点。但我主要使用SchemaUpdate作为比较现有模式与休眠模式的差异工具。这就是为什么我需要查看自上次部署以来发生了哪些变化(例如添加了新索引等)。现在SchemaUpdate对我来说很好,除了一种情况 - 索引。我知道并评估了数据库重构工具,包括下面提到的LiquiBase。他们中的大多数不能为我提供我期望的灵活性水平。我期待Liquibase 2.0希望它能满足我的胃口。 – FoxyBOA 2009-10-31 05:11:07

回答

1

在Hibernate 3.5.0-Beta-2发行版中解决了该问题。细节是herehere

3

架构更新不打算在生产环境中使用。它只能用于开发人员。

另一方面,模式出口建议用于生产。导出模式以获取实际的模式定义并使用其他方式更新现有数据库。编写你自己的更新脚本或使用指定的工具。

+1

+1。对于问题中的“指定工具”,我强烈建议LiquiBase(http://www.liquibase.org/)。它甚至与Hibernate集成,所以导出模式的手动步骤是不必要的。 – ChssPly76 2009-10-30 16:32:23