2012-04-10 43 views
0

是否可以执行下列操作...JPA:是否可以将派生类保存在其自己的表中,从而引用的字段是MappedSuperclass?

我有一个名为MappedSuperclass行动:

@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; 
    } 
} 

而且我有2类(实体),从这个类派生,例如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; 
    } 
} 

在另一个实体,称为杂志有这样的动作属性设置:

@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; 
} 

在我的代码中,我实例GenericAction并将其设置为Journal的setter。当Journal将被保存时,它应该将GenericAction的内容保存在它自己的表中,但这不会发生。它将GenericAction的字节码保存到日志的操作字段中。

这可能吗?

回答

1

如果我得到你的问题正确,你可能建议立即进行删除考虑以下

@Inheritance(strategy = InheritanceType.TABLE_PER_CLASS) 

默认继承startegy是SINGLE_TABLE。至少JPA规范说明了这一点。我敢肯定,休眠遵循这个

JPA规范看一看这里

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

我略一两件事: 你必须把@OneToOne或@ManyToOne annotaton你的动作特性所以你已经加入实体,否则它只是序列化行动的财产

+0

你说得对,它与继承类型.TABLE_PER_CLASS一起工作。我把它放在一个抽象类“ActionBase”和GenericAction(和其他动作)扩展这个类。 – Bevor 2012-04-19 06:51:38

相关问题