我的實體類層次結構如下.. ClassB的延伸ClassA的延伸抽象mappedsuperclass 抽象類通用回調方法(@PostLoad ..)爲繼承實體類 - JPA的EclipseLink
抽象類
@MappedSuperclass
public abstract class AbstractClass implements Serializable
{
}
ClassA的
@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
}
}
ClassB的
@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中。
在此先感謝
採用超正在爲個人持續兩ClassA和ClassB的的。但是我有一個疑問,使用EntityListener進行推廣對我來說很有好處,因爲我可以在'n'個實體類中使用它,因爲這兩種方法對於所有人都是通用的。現在我的問題是我必須傳遞一個類實例到這個回調方法(即MyEntityListeners)來設置它們各自的實體的列值。你可以建議任何這個問題。 – Karthigeyan
這不是問題:您在'MyEntityListeners'的回調方法中獲得實體的實例。 EntityListeners也被繼承。看到我的chnaged響應。 –