是否可以执行以下操作...
我有一个名为Action的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;
}
}
在另一个名为Journal的实体中,有一个Action属性集:
@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的字节代码保存到Journal的Action字段中。
这有可能吗?
答案 0 :(得分:1)
如果我的问题正确,你可能会考虑以下
@Inheritance(strategy = InheritanceType.TABLE_PER_CLASS)
默认继承startegy是SINGLE_TABLE。至少JPA规范说明了这一点。我很确定Hibernate在这个
中遵循JPA规范看看这里
http://docs.jboss.org/ejb3/app-server/HibernateAnnotations/reference/en/html_single/index.html
我省略了一件事: 你必须在你的动作属性上放置@OneToOne或@ManyToOne annotaton,这样你才能加入实体,否则它只是序列化动作属性