我有一个实体Quest
,其中包含许多Task
s:
@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 = ...
)之间的联系,这似乎是我在删除任务本身时要做的事情(它不是' T)。在任何情况下,它都不应该为null,它应该DELETE
完全Task
。
有什么问题?
答案 0 :(得分:2)
更新并非荒谬:您从task
的列表中删除quest
,因此hibernate会删除task
和quest
之间的连接。
更新:
我刚刚注意到您在同一个字段中有@JoinColumn
和@OneToMany
。我认为你应该这样做(取决于你使用的hibernate版本):
@OneToMany(mappedBy="quest", orphanRemoval=true,cascade=CascadeType.ALL)
@MapKey(name="taskName")
private Map<String, Task> tasks = Maps.createHash();