Hibernate 在同一张表上的一对一映射

标签 hibernate mapping parent one-to-one

我们有一个场景,其中有一个主产品和另一个子产品,其行为方式与主产品完全相同。主产品最多可以有一个子产品。每当用户选择主产品时,我们都会向用户显示子产品(如果有)。我是这样设计的

    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/

相关文章:

java - Hibernate 映射 - 将两个表连接到一个平面类

javascript - 需要通过 jQuery 定位元素,请 <3

JavaFX 节点 - 如何让最终用户调整它们的大小?

CSS 父类优于其他 CSS 类

java - 使用 Hibernate native sql 查询更改 PostgreSQL 序列

Hibernate二级缓存Composite-ID

sql - 没有主键的表的 hibernate 注释 ID

java - 连接非实体类中的两个实体

google-maps - 在 Google map 图 block 顶部绘制 shapefile

javascript - react 缺少键的对象映射数组导致 TypeError 崩溃