我们有一个场景,其中有一个主产品和另一个子产品,其行为方式与主产品完全相同。主产品最多可以有一个子产品。每当用户选择主产品时,我们都会向用户显示子产品(如果有)。我是这样设计的
public class Product {
...
private Product parentProduct;
在 hibernate 映射 xml 中(是的..我们仍然使用 xml)
<one-to-one name="parentProduct" class="uk.co.xxx.domain.Product" cascade="save-update" foreign-key="PARENT_PRODUCT_ID"/>
对于主要产品,parentProduct 将为 null。
我不确定这样的一对一天气是否有效。尚未尝试保存产品。
您对这样的设计有什么建议吗?我看到一些潜在的错误,例如子产品共享主产品的许多属性,并且在创建产品本身时存在代码重复和潜在的错误。但是,通过避免子产品的单独表格,我避免了使用产品表的现有报告、批处理等代码的更改。
最佳答案
这应该有效。您可以在复制构造函数中设置与父级共享的属性(创建子产品时,将父级产品作为构造函数参数传递,复制所需内容,将父级设置为 parentProduct
)。
替代方案可能是 SubProduct 扩展 Product
,但您使用 SINGLE_TABLE
继承策略,而不是 TABLE_PER_CLASS
。您只需将 dtype
列(加上您已有的外键列)添加到 Product
表中,这样您就知道哪些产品是主要的,哪些是主要的t。如果您已有数据,则需要更新 dtype
的值。
关于Hibernate 在同一张表上的一对一映射,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27361016/