2010-09-25 38 views
1

例如:为什么Hibernate重新实现数据库已有的功能?

@Table(name = "stock", catalog = "mkyong", uniqueConstraints = { 
@UniqueConstraint(columnNames = "STOCK_NAME"), 
@UniqueConstraint(columnNames = "STOCK_CODE") }) 

@Column(name = "STOCK_NAME", unique = true, nullable = false, length = 20) 

约束像 '独特的', '可为空',偶数场长度核心数据库功能。为什么要在这里包括?另外(虽然这可能会伤害到一些),但我还想知道,数据库实现这些约束,尤其是像Oracle这样的主流商业数据库,可能比OSS Hibernate开发人员可以实现的更好。

在Hibernate中使用这种类型的东西是明智的吗?还是将约束条件等放在数据库中是一种更好的做法?看起来,如果你使用这些Hibernate特性,你实际上将数据库视为一个文件系统,那有什么意义?这个用法无处不在,但我还没有找到解释你为什么要这样做的文档。

+0

不可正对Hibernate的一个“专家”,我可能做一些假设它“重新实现”这些功能(看起来确实如此),但解释WHY(不是如何)的文档似乎并不容易找到! – Manius 2010-09-25 16:42:00

回答

3

它没有实现它们 - 它可以选择根据模式验证数据模型,还是创建它。

hibernate.hbm2ddl.autoconfiguration属性是允许您基于映射创建模式的属性。

创建SessionFactory时,自动验证或导出模式DDL到数据库。使用create-drop,当SessionFactory显式关闭时,数据库模式将被删除。

例如验证|更新|创建|创建拖放

这是非常有用的,如果你希望自己的数据模型,在中央的地方,而不是数据库结构

+0

为什么不能从数据库本身获取这些信息?这就是我用.NET应用程序所做的。 – siride 2010-09-25 16:58:18

+0

@siride - 如果它不存在,它将如何获取它?它根据映射定义导出模式(或确保模式符合它们) – Bozho 2010-09-25 17:00:37

+0

至少在MySQL和MS SQL中,数据库中有包含关于模式的信息的表。您可以查询这些信息并了解列和约束。当然,Hibernate仍然需要知道表格存在,但是比其他所有注释更容易指定。 – siride 2010-09-25 17:13:18

0

Hibernate可以根据这些注释为您创建数据库模式。

相关问题