Java Cascade在Hibernate中不工作

Java Cascade在Hibernate中不工作,java,mysql,hibernate,cascade,Java,Mysql,Hibernate,Cascade,我有一个系统,其中我有两种类型的设备:静态设备和动态设备。由于我对mysql中的继承知识有限,而且我不知道如何使它与hibernate一起工作,所以我只制作了一个BASEDEVICE。所以staticdevice和dyndevice都有一个basedevice的外键,我已经将static和dyndevice设置为null 问题是,当我保存basedeivce时,我希望保存动态设备或静态设备,因为我已经用CascadeType.Persist对其进行了注释。没用,所以我试着用了。还是不行 @En

我有一个系统,其中我有两种类型的设备:静态设备和动态设备。由于我对mysql中的继承知识有限,而且我不知道如何使它与hibernate一起工作,所以我只制作了一个BASEDEVICE。所以staticdevice和dyndevice都有一个basedevice的外键,我已经将static和dyndevice设置为null

问题是,当我保存basedeivce时,我希望保存动态设备或静态设备,因为我已经用CascadeType.Persist对其进行了注释。没用,所以我试着用了。还是不行

@Entity
@NamedQuery(name="Basedevice.findAll", query="SELECT b FROM Basedevice b")
public class Basedevice implements Serializable {
    private static final long serialVersionUID = 1L;

    @Id
    @GeneratedValue(strategy=GenerationType.IDENTITY)
    private int id;

    //bi-directional one-to-one association to Dyndevice
    @OneToOne(cascade = CascadeType.ALL)
    @JoinColumn(name="id", referencedColumnName="BASEDEVICE_id", nullable = true)
    private Dyndevice dyndevice;

    //bi-directional one-to-one association to Staticdevice
    @OneToOne(cascade = CascadeType.ALL)
    @JoinColumn(name="id", referencedColumnName="BASEDEVICE_id", nullable = true)
    private Staticdevice staticdevice;

    //bi-directional one-to-one association to Devicemap
    @OneToOne
    @JoinColumn(name="id", referencedColumnName="BASEDEVICE_id", nullable = true)
    private Devicemap devicemap;

    //bi-directional many-to-one association to Logentry
    @OneToMany(mappedBy="basedevice", fetch = FetchType.EAGER)
    private List<Logentry> logentries;
    ....
}
为什么它不能保持我的静态或动态功能?Basedevice保持良好,我确信它有一个静态设备:

public void addStaticDevice(Staticdevice device) {
    DAO<Basedevice> basedeviceDAO = new DAO<>(Basedevice.class);
    basedeviceDAO.save(device.getBasedevice());
    devices_.add(device.getBasedevice());
}
其中.save方法调用entitymanager的persist方法。 我以前从未遇到过cascade的问题


有什么想法吗?

basedevice是代表某种东西,还是只需要它是某种统一父类的代码?如果您的代码中确实只需要staticdevice和dynamicdevice,因此basedevice可能只是一个抽象的父对象,而不是一个真正的实体,请尝试将基本设备抽象化,删除@entity并使用@MappedSuperclass@Nadir我喜欢这个主意。但是我必须删除Basedevice表,对吗?或者我必须在我的数据库中做一些特定的事情,然后才能这样做?取决于您想要使用的继承模型,您可以有一个包含公共数据的基表和特定字段的附加表,或者一个大表,或者两个表中只包含两个实体的表公共字段。根据你的需要,看你走错了路。您应该看看@InheritanceFosterategy=InheritanceType.JOINED。它允许您像在Java中一样对实体层次结构进行建模。@KlausGroenbaek-我试过重新研究联接的inheritance类型,结果它成功了。非常感谢。