简体   繁体   English

删除继承类 JPA

[英]Delete Inherited class JPA

I have a table defined as this:我有一个定义如下的表:

@Entity
@Inheritance(strategy=InheritanceType.JOINED)
@DiscriminatorColumn(name = "EVENT_TYPE")
public abstract class Event implements Serializable {
    @Id
    @GeneratedValue
    private Long id;
...
}

Then I have this inherited tables:然后我有这个继承的表:

@Entity
@DiscriminatorValue("BOOLEANVALUE")
public class BooleanValueEvent extends Event {
    ...
}

@Entity
@DiscriminatorValue("EXACTVALUE")
public class ExactValueEvent extends Event {
    ...
}

Hibernate creates two table in database, but when I try to delete on JPA an inherited object it returns foreign key constraint violation error, because It try to delete first Event class. Hibernate 在数据库中创建了两个表,但是当我尝试在 JPA 上删除一个继承的对象时,它返回外键约束冲突错误,因为它尝试删除第一个Event类。 How can I delete inherited class first when I delete superClass in order to avoid key constraint violation error?删除 superClass 时如何先删除继承的类,以避免违反键约束错误?

Thank you.谢谢你。

Using cascade delete , removing a SubTable entity will succeed and it will remove both the subTable and the parentTable rows.使用级联删除,删除子表实体将成功,它将删除子表和父表行。

@Entity
@DiscriminatorValue("BOOLEANVALUE")
@OnDelete(action = OnDeleteAction.CASCADE)
public class BooleanValueEvent extends Event {
    ...
}

@Entity
@DiscriminatorValue("EXACTVALUE")
@OnDelete(action = OnDeleteAction.CASCADE)
public class ExactValueEvent extends Event {
    ...
}

Finally I solved it with.最后我解决了它。

@JsonTypeInfo(
        use = JsonTypeInfo.Id.NAME,
        include = JsonTypeInfo.As.PROPERTY,
        property = "typeName")
@JsonSubTypes({
        @Type(value = BooleanValueEvent.class),
        @Type(value = ExactValueEvent.class)
})
@Entity
@Inheritance(strategy=InheritanceType.JOINED)
@DiscriminatorColumn(name = "EVENT_TYPE")
public abstract class Event implements Cloneable, Serializable {
    @Id
    @GeneratedValue
    private Long id;
...
}

And

@Entity
@DiscriminatorValue("BOOLEANVALUE")
public class BooleanValueEvent extends Event {
    ...
}

@Entity
@DiscriminatorValue("EXACTVALUE")
public class ExactValueEvent extends Event {
    ...
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM