jpa:如何重写子类中元素集合的集合表

sg3maiej  于 2021-07-03  发布在  Java
关注(0)|答案(1)|浏览(425)

情境:我有一个抽象java类和两个子类。抽象类包含字符串的集合。这两个子类都有自己的db表,其中的字符串集合也应该保存在自己的db表中,具体取决于子类。我在这里使用jpa元素集合。activeresult类的设置工作正常。但是对于archivedresult,我无法解决如何重写集合表,以便它可以从自己的归档结果值表中读取。
此设置的结果:当从archivedresult读取时,它找不到集合的值,因为它试图在超类的活动结果值表中找到它们,而不是在存档结果值表中搜索它们。
我希望在不更改java类的情况下也能做到这一点(因为我不应该这样做),因此我对如何相应地更改hibernate orm.xmlMap很感兴趣。
提示:实际表存档的\u result/active \u result有更多(相同的列),但这些列与问题无关。
遵循java代码

public abstract class AbstractResult {
  protected String Id;
  protected List<String> values;
}

public class ArchivedResult extends  AbstractResult {
  public ArchivedResult() {
    super();
  }
}

public class ActiveResult extends  AbstractResult {
  public ActiveResult() {
    super();
  }
}

这里是orm.xmlMap

<entity-mappings .... >
  <mapped-superclass class="com.test.AbstractResult" access="FIELD">
    <attributes>
        <id name="Id">
            <column name="ar_id" />
        </id>

        <element-collection name="values" fetch="EAGER">
            <order-column name="item_index" />
            <column name="result_value" />
            <collection-table name="active_result_values">
                <join-column name="ar_id" />
            </collection-table>
        </element-collection>

    </attributes>
</mapped-superclass>

<entity name="ActiveResult" class="com.test.ActiveResult" access="FIELD">
    <table name="active_result" />
    <inheritance strategy="TABLE_PER_CLASS"/>
</entity>

<entity name="ArchivedResult" class="com.test.ArchivedResult"
        access="FIELD">
    <table name="archived_result" />
    <inheritance strategy="TABLE_PER_CLASS"/>
    <attributes>
        <element-collection name="values" fetch="EAGER">
            <order-column name="item_index" />
            <column name="result_value" />
            <collection-table name="archived_result_values">
                <join-column name="ar_id" />
            </collection-table>
        </element-collection>
    </attributes>
</entity>
</entity-mappings>
ocebsuys

ocebsuys1#

如果要重用契约,请将getter和setter定义为基类中的抽象方法,并在子类中实现它们。

相关问题