2015-11-09 6 views
1

У меня есть таблица определяется как это:Удалить наследуемый класс JPA

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

Тогда я это унаследовало таблицы:

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

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

Hibernate создает две таблицы в базе данных, но при попытке удалить на JPA - унаследованный объект, который возвращает ошибку нарушения ограничения внешнего ключа, поскольку он пытается удалить первый класс Event. Как я могу удалить унаследованный класс при удалении суперкласса во избежание ошибки нарушения ограничения ключа?

спасибо.

ответ

0

Наконец-то я решил это с помощью.

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

И

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

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

Использование каскадного удаления, удаление объекта SubTable будет успешным, и оно удалит строки subTable и parentTable.

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

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

Это не работает :( – Sapikelio