2012-04-10 4 views
0

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?

Antwort

1

Wenn ich Ihre Frage richtig bekam wahrscheinlich Sie shoul folgende

@Inheritance(strategy = InheritanceType.TABLE_PER_CLASS) 

Die Vererbungs Standard betrachten startegy SINGLE_TABLE ist. Zumindest die JPA-Spezifikation besagt dies. Ich bin mir ziemlich sicher, dass Hibernate JPA-Spezifikation in diesem Werfen Sie einen Blick hier

http://docs.jboss.org/ejb3/app-server/HibernateAnnotations/reference/en/html_single/index.html

ich noch eine Sache weggelassen

folgt: Sie @OneToOne oder @ManyToOne annotaton auf Ihrem Aktionseigenschaft zu setzen haben also haben Sie sich Entitäten angeschlossen, sonst serialisiert es nur die Aktion property

+0

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