似乎标准的做法是让Hibernate为你设计/生成你的数据库架构,这是一个令人窒息的新概念.从我读过的教程中,你只需在你的hibernate.cfg.xml配置文件中添加一个新实体,用@Entity注释你想要的任何POJO,并且瞧 – Hibernate为你创建表.虽然这很酷,但我想知道一些场景:
>如果您已经拥有数据库架构并且Hibernate想要为您生成的一个架构并不符合它,该怎么办?如果你有一个疯狂的DBA拒绝在预定义(非Hibernate)架构上让步怎么办?
>如果您的参考表中包含数万条记录(如世界上所有城市),该怎么办?你是否必须实例化并保存()成千上万的独特POJO,或者有没有办法配置Hibernate,以便它会尊重而不是覆盖表中已存在的数据?
>如果您想对架构/表进行性能调整,该怎么办?这包括索引,标准化超出Hibernate自动创建的内容?
>如果要向表中添加约束或触发器,该怎么办?指标?
我想根本就是以下内容:
看起来Hibernate会在您的数据库上创建并强制使用特定的架构/配置.我想知道这个议程将如何与我们的平台标准,我们的DBA哲学以及我们对Hibernate与之交互的表调整/调整表的能力发生冲突.
提前致谢.
解决方法
但是,如果要以不同方式将实体映射到数据库表,可以显式告诉Hibernate如何映射这些表(从简单的属性,如更改表名,再到重新定义相关实体之间的外键关系以及如何保持这些关系) ).
如果你正确地执行此操作,则不需要实例化和保存现有数据,因为这没有意义 – 数据库已经包含了与Hibernate理解的形式完全相同的实体信息. (考虑一下 – 加载然后立即保存实体应始终是无操作,因此可以完全跳过.)
所以对你的问题的简短回答是“不”.如果你不关心设计表,你可以让Hibernate采用合理的默认值.如果您确实想要显式设计架构,则可以执行此操作,然后将该精确架构描述为Hibernate.