Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/hibernate/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Hibernate JPA:是否可以将派生类保存在它自己的表中,其中引用的字段是MappedSuperclass?_Hibernate_Ejb_Jpa 2.0 - Fatal编程技术网

Hibernate JPA:是否可以将派生类保存在它自己的表中,其中引用的字段是MappedSuperclass?

Hibernate JPA:是否可以将派生类保存在它自己的表中,其中引用的字段是MappedSuperclass?,hibernate,ejb,jpa-2.0,Hibernate,Ejb,Jpa 2.0,是否可以执行以下操作 我有一个名为Action的MappedSuperclass: @MappedSuperclass public class Action extends EntityBase { private static final long serialVersionUID = 2604473746836781718L; private String event; public String getEvent() { return

是否可以执行以下操作

我有一个名为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;
    }
}
此外,我还有两个类(实体)是从这个类派生的,例如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的实体中,有以下操作属性集:

@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设置它。当日志被持久化时,它应该将generiAction的内容保存在它自己的表中,但这不会发生。它将GenericAction的字节码保存到日记账的Action字段中


这是可能的吗?< /P> < P>如果我正确地回答了你的问题,你可能会考虑下面的

@Inheritance(strategy = InheritanceType.TABLE_PER_CLASS)
默认的继承开始方式是SINGLE_TABLE。至少JPA规范说明了这一点。我很确定Hibernate在这方面遵循JPA规范

看看这里

我还遗漏了一件事:
您必须在action属性上添加@OneToOne或@ManyToOne注释,以便加入实体,否则它只会序列化action属性

您是对的,它与InheritanceType.TABLE\u PER\u类一起工作。我把它放在一个抽象类“ActionBase”上,GenericAction(和其他操作)扩展了这个类。