gpt4 book ai didi

java - 从 Map 中删除实体尝试将引用清空

转载 作者:行者123 更新时间:2023-12-02 07:40:34 24 4
gpt4 key购买 nike

我有一个实体Quest,其中包含许多Task:

@Entity
public class Quest {

@OneToMany(orphanRemoval=true,cascade=CascadeType.ALL)
@JoinColumn(name="quest_id")
@MapKey(name="taskName")
private Map<String, Task> tasks = Maps.createHash();

@ElementCollection
@OrderColumn
private Set<String> completedTasks;

@Entity
public class Task implements Serializable {

@ManyToOne(optional=false)
@JoinColumn(name="quest_id")
private Quest quest;

@Column(nullable=false,updatable=false,length=50)
private String taskName;

现在当我这样做时:

// store the task as completed
quest.getCompletedTasks().add(taskName); // set
// remove the task entity
quest.getTasks().remove(taskName); // map

Hibernate 尝试执行无意义的查询,但失败了:

update Task set quest_id=null where quest_id='77149'

这似乎打破了任务与其所有任务之间的联系(WHERE quest_id = ...),在我看来,这就像任务完成时要做的事情本身被删除(但事实并非如此)。无论如何,它不应该清空任何内容,而应该完全DELETE Task

出了什么问题?

最佳答案

更新并非无意义:您从 quest 列表中删除了 task,因此 hibernate 删除了 task任务

更新:我刚刚注意到您在同一字段上有 @JoinColumn@OneToMany 。我认为你应该这样做(取决于你使用的 hibernate 版本):

@OneToMany(mappedBy="quest", orphanRemoval=true,cascade=CascadeType.ALL)
@MapKey(name="taskName")
private Map<String, Task> tasks = Maps.createHash();

关于java - 从 Map 中删除实体尝试将引用清空,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11668528/

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