gpt4 book ai didi

java - Hibernate 继承映射和属性覆盖

转载 作者:行者123 更新时间:2023-12-02 08:36:40 32 4
gpt4 key购买 nike

我正在开发的系统有一个名为Order的域对象,它继承自AbstractPercientObject。现在我需要添加另一个名为 ExternalOrder 的域对象,它具有 Order 的一些属性,但不是全部。我希望在某些地方对这两个对象进行多态处理。因此我正在考虑实现继承映射。

我创建了一个 AbstractOrder,它现在扩展了 AbstractPersistentObject 并将公共(public)属性移至 AbstractOrder。 Order 和ExternalOrder 现在扩展了AbstractOrder。

由于 Order 表在数据库中已经有大量数据,因此我不希望对架构进行太多更改。

  1. 如果我省略 InheritanceType.SINGLE_TABLE,哪种继承策略更适合我?我应该提到我必须在至少一个域对象中使用 OnetoMany 联接。域对象将引用 AbstractOrder,Hibernate 将在运行时决定此 AbstractOrder 的具体子类。

  2. AbstractPersistentObject 具有 @Id 和 @GenerateValue(strategy=GenerationType.IDENTITY) 作为属性 id。当我实现继承时有没有办法覆盖它?据我了解, GenerationType.IDENTITY 不适用于某些继承选择,我不知道如何覆盖它。我研究过 @AttributeOverride 但我认为它仅在您想要覆盖某些 @Column 值时才有用。

最佳答案

1) 这里你实际上没有太多选择。另外两个继承映射策略是 table per class这对你不起作用(因为它不支持 IDENTITY)和 joined subclasses这将要求您将“Orders”表拆分为两个(AbstractOrder 和 Order),并为ExternalOrder 添加另一个表。

2) 您不能覆盖继承层次结构中 id 的属性。不过,这也无所谓,每类一个 table 的策略绝对不理想。

关于java - Hibernate 继承映射和属性覆盖,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1558176/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com