gpt4 book ai didi

java - 使用 FetchType.EAGER 时发生 CascadeType.ALL 错误

转载 作者:行者123 更新时间:2023-12-01 12:48:55 25 4
gpt4 key购买 nike

我有这种情况(使用springMVC + hibernate):

一条“PriceList”记录由一项“服务”和一项“公司”创建:

价目表类别:

//Many to one with Company
@NotNull(message = "....")
@ManyToOne
@JoinColumn(name = "company_id", referencedColumnName="id", nullable=false)
private Company company;


//Many to one with Service
@NotNull(message = "....")
@ManyToOne
@JoinColumn(name = "service_id", referencedColumnName="id", nullable=false)
private Service service;


服务等级:

@OneToMany(mappedBy="service", cascade=CascadeType.ALL, fetch = FetchType.LAZY) 
private Set<PriceList> priceList;


公司类别:

@OneToMany(mappedBy="company", cascade=CascadeType.ALL, fetch = FetchType.LAZY) 
private Set<Company> company;



我的问题是当我尝试删除价目表时:没有EAGER一切都很好,但如果我保留 CascadeType.ALL 和 FetchType.EAGER,我会收到此错误:

org.springframework.web.util.NestedServletException: Request processing failed; nested exception is org.springframework.dao.InvalidDataAccessApiUsageException: deleted object would be re-saved by cascade (remove deleted object from associations): nested exception is org.hibernate.ObjectDeletedException: deleted object would be re-saved by cascade (remove deleted object from associations)

我不明白为什么会收到此错误...我认为如果我想删除“priceList”记录,不会有任何问题。

我认为在删除我的记录之前我应该​​刷新或类似的东西......

我删除了公司或服务,一切都很好,因为价目表中的记录也被删除了。

非常感谢您的建议

最佳答案

在处理双向关联并且您想要添加/删除子项时,您应该在父实体中使用以下方法:

public void addChild(Child child) {
children.add(child);
child.setParent(this);
}

public void removeChild(Child child) {
children.remove(child);
child.setParent(null);
}

删除将破坏父/子以及子/父关联。

关于java - 使用 FetchType.EAGER 时发生 CascadeType.ALL 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24410326/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com