情境:我有一个抽象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>
1条答案
按热度按时间ocebsuys1#
如果要重用契约,请将getter和setter定义为基类中的抽象方法,并在子类中实现它们。