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

时间:2010-09-25 16:39:29

标签: java mysql database oracle 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功能,你实际上将数据库视为一个文件系统,那么重点是什么?这种用法无处不在,但我还没有找到解释你为什么要这样做的文档。

2 个答案:

答案 0 :(得分:3)

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

hibernate.hbm2ddl.auto configuration属性允许您根据映射创建架构。

  

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

     

e.g。验证|更新|创建| create-drop

如果您希望数据模型位于中心位置而不是数据库结构,这非常有用

答案 1 :(得分:0)

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