Ist es möglich, die folgende ...JPA: ist es möglich, eine abgeleitete Klasse in einer eigenen Tabelle zu speichern, wobei das referenzierte Feld die MappedSuperclass ist?
Ich habe eine MappedSuperclass Aktion zu tun genannt:
@MappedSuperclass
public class Action extends EntityBase
{
private static final long serialVersionUID = 2604473746836781718L;
private String event;
public String getEvent()
{
return event;
}
public void setEvent(String event)
{
this.event = event;
}
}
Außerdem habe ich zwei Klassen (Entities), die von dieser Klasse abgeleitet wird, zum Beispiel GenericAction:
@Entity
@Table(name = "GENERIC_ACTION")
@AttributeOverrides({@AttributeOverride(name = "id", column = @Column(name = "GAC_ID")),
@AttributeOverride(name = "version", column = @Column(name = "GAC_VERSION")), @AttributeOverride(name = "event", column = @Column(name = "GAC_EVENT"))})
public class GenericAction extends Action
{
private static final long serialVersionUID = 2694061082912048881L;
@Column(name = "GAC_PAYLOAD")
private String payload;
public String getPayload()
{
return payload;
}
public void setPayload(String payload)
{
this.payload = payload;
}
}
In einer anderen Entität namens Journal gibt es diese Aktion Attribut:
@Entity
@Table(name = "JOURNAL")
@AttributeOverrides({@AttributeOverride(name = "id", column = @Column(name = "JRN_ID")),
@AttributeOverride(name = "version", column = @Column(name = "JRN_VERSION"))})
public class Journal extends EntityBase
{
private static final long serialVersionUID = 2525323851057436815L;
@Column(name = "JRN_ACTION")
private Action action;
}
In meinem Code ich Instanz GenericAction und legen Sie es mit Journal-Setter. Wenn Journal beibehalten wird, sollte es den Inhalt von GenericAction in seiner eigenen Tabelle speichern, aber das wird nicht passieren. Es speichert den Byte-Code von GenericAction in Journal Action-Feld.
Ist das überhaupt möglich?
Sie hatten Recht, es funktioniert mit InheritanceType.TABLE_PER_CLASS. Ich lege es auf eine abstrakte Klasse "ActionBase" und GenericAction (und andere Aktionen) erweitern diese Klasse. – Bevor