我的实体类层次结构如下.. ClassB扩展ClassA扩展抽象 mappedsuperclass AbstractClass
抽象类
@MappedSuperclass
public abstract class AbstractClass implements Serializable
{
}
A类
@Table(name = "TABLE_ONE")
@SecondaryTable(name = "TABLE_TWO",
@Inheritance(strategy=InheritanceType.SINGLE_TABLE)
@DiscriminatorColumn(name="Type", discriminatorType=DiscriminatorType.STRING)
@DiscriminatorValue("ClassA")
public class ClassA extends AbstractClass
{
@Column(name = "CLASSA_XML")
private String ClassAXML;
@PrePersist
@PreUpdate
public void covertObjectToXml()
{
this.ClassAXML= JAXBUtilities.marshal(Object);
}
@PostLoad
public void convertXmlToObject()
{
//does unmarshal
}
}
B类
@DiscriminatorValue("ClassB")
public class ClassB extends ClassA
{
@Column(name = "CLASSB_XML", table = "TABLE_TWO")
private String ClassBXML;
@PrePersist
@PreUpdate
public void covertObjectToXml()
{
this.ClassAXML= JAXBUtilities.marshal(Object);
}
@PostLoad
public void convertXmlToObject()
{
//does unmarshal
}
}
问题:当我坚持使用 ClassB 实体时。不调用 ClassA 回调方法,并且不保留我的 classAXml 属性中的值。
有没有为我继承的实体类结构泛化回调方法(即covertObjectToXml和convertXmlToObject)..这样当我单独使用ClassA和ClassB时,我的回调方法会根据继承分别调用并且它们的值可以持久化。
笔记:
- 我已经从 ClassA 中删除了回调方法并将其概括为 classB 并持久化,但我的要求主要是 classA 和 ClassB 的单独持久化。
- 我的回调方法不应该在 mapedSuperClass 即 AbstractClass 中。
提前致谢