JPA:如何覆盖子类中元素集合的集合表



情况:我有一个抽象的java类和两个子类。抽象类包含一组字符串。这两个子类都有自己的DB表,其中的字符串集合也应该保存在自己的DB表格中,具体取决于子类。我在这里使用jpa元素集合。ActiveResult类的设置运行良好。但是对于ArchivedResult,我不知道如何覆盖集合表,以便它可以从自己的archived_result_values表中读取。

此设置的结果:从ArchivedResult读取时,它找不到集合的值,因为它试图从超类在active_Result_values表中找到它们,而不是在archived_Result_value表中搜索它们。

我希望这在不更改Java类的情况下是可能的(因为我不应该这样做(,所以我对如何相应地更改hibernate orm.xml映射感兴趣。

hint:真正的表archived_result/active_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.xml映射

<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>

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

最新更新