我把Type类作为实体。类型可以有一个父类型和多个子类型。
@Entity
@Table(name = "type")
public class Type extends EntityItem {
...
@ManyToOne(cascade = CascadeType.ALL)
@JoinColumn(name = "parent_type", referencedColumnName = "id")
private Type parentType;
@OneToMany(mappedBy = "parent_type")
private List<Type> childTypes = new ArrayList<>();
...
}
当我用子类创建父类型并保存它们时,一切都没问题。但是,当我试图删除父文件时,下面有一个错误
2018-08-05 15:58:50,843 INFO [main] impl.TypeServiceImpl (TypeServiceImpl.java:53) - Type delete: Type [id=1000, parentType=null]
Hibernate:
delete
from
type
where
id=?
Aug 05, 2018 3:58:50 PM org.hibernate.engine.jdbc.spi.SqlExceptionHelper logExceptions
WARN: SQL Error: 0, SQLState: 23503
Aug 05, 2018 3:58:50 PM org.hibernate.engine.jdbc.spi.SqlExceptionHelper logExceptions
ERROR: ERROR: update or delete on table "type" violates foreign key constraint "fk_gbqg39jytwquch0bjm9j80gsf" on table "type"
Подробности: Key (id)=(1000) is still referenced from table "type".
你能解释一下是怎么回事吗?非常感谢。
发布于 2018-08-06 15:40:46
需要使用在@OneToMany
上的cascade = CascadeType.REMOVE
。
试试这个:
@OneToMany(mappedBy = "parent_type",cascade = CascadeType.REMOVE)
private List<Type> childTypes = new ArrayList<>();
https://stackoverflow.com/questions/-100005915
复制相似问题