我遇到了一个需求,我有两个表,Order 和 Item,它们在 Order --> Item 之间具有“一对多”关联。但是,没有外键。
只是想知道是否可以根据 ORM 设计原则将 Pojo 设计为具有关联关系。
除了应用程序中间层必须确保关联之外,还有哪些优点和缺点。
我遇到了一个需求,我有两个表,Order 和 Item,它们在 Order --> Item 之间具有“一对多”关联。但是,没有外键。
只是想知道是否可以根据 ORM 设计原则将 Pojo 设计为具有关联关系。
除了应用程序中间层必须确保关联之外,还有哪些优点和缺点。
根据我的经验,Hibernate 并不关心外键。当您将它们添加到您的映射或注释时,它仅用于生成 DDL,如果您要求 Hibernate 为您生成 DDL 而不是手动执行。我无法通过文档证实这一点。同样,根据我的经验,我还没有看到 Hibernate 使用外键。
除了你提到的问题,我看不出任何问题。不过,这是一个大问题,应该尽可能避免。
关于对象世界与关系世界,考虑一下 Christian Bauer 和 Gavin King 在“Java Persistence with Hibernate”中所说的话
面向对象的语言使用对象引用来表示关联;但在关系世界中,关联表示为外键列,带有键值的副本(以及保证完整性的约束)。两种表达方式有本质区别...
对象引用本质上是定向的;关联是从一个对象到另一个对象。他们是指针...
另一方面,外键关联本质上不是定向的。导航对于关系数据模型没有意义,因为您可以使用表连接和投影创建任意数据关联。挑战在于将完全开放的数据模型(独立于处理数据的应用程序)与依赖于应用程序的导航模型(该特定应用程序所需的关联的受限视图)连接起来。
所以,我从中得到的是,已经存在脱节。所以 Hibernate 不使用外键定义对我来说是有意义的。