尽管清除它,实体中的列表对象仍返回到先前的状态

时间:2018-06-11 11:39:34

标签: java spring hibernate spring-boot

我有一个实体“city”,其中列出了一个Object,如下所示:

@ManyToMany(mappedBy = "building", cascade = CascadeType.REMOVE)
@LazyCollection(LazyCollectionOption.FALSE)
@SortComparator(DocumentSelectionComparator.class)
@OrderBy("id")
private List<DocumentSelection> house;
//get set methods..

我现在的问题是我想在某个时刻清除对象,但它总是返回到包含数据的先前状态。我尝试清除对象并保存实体,但它仍然无法正常工作。 这就是我的尝试:

//1
city.setHouse(null)
cityRepository.save(city)

//2
house.clear();
city.setHouse(house)
cityRepository.save(city)

我认为它不起作用,因为该实体正在其他地方被引用,从而改写了这些变化。也许吧?如果是这样我怎么改变它。我真的需要清除那个对象。

感谢您的帮助

2 个答案:

答案 0 :(得分:1)

我假设您的关系是双向的(我可以从mappedBy告诉),在这种情况下清除您尝试终止关系的列表,并且要执行此操作,您需要从拥有实体端而不是非生成实体执行此操作侧。

与mappedBy的关系的一侧是非拆分实体,因此您需要从DocumentSelection端删除关系。

为此,您需要遍历列表,然后从该列表中删除当前对象。

答案 1 :(得分:0)

您可以使用孤儿删除功能。

@ManyToMany(mappedBy = "building", cascade = CascadeType.REMOVE, orphanRemoval = true)

然后致电

city.getHouse().clear()
cityRepository.save(city)