0

我有一个Quest包含许多Tasks 的实体:

@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完全。

怎么了?

4

1 回答 1

2

更新并非无意义:您删除了taskfromquest的列表,因此休眠删除了task和之间的连接quest

更新:我刚刚注意到你有@JoinColumn@OneToMany在同一个领域。我认为您应该这样做(取决于您使用的休眠版本):

@OneToMany(mappedBy="quest", orphanRemoval=true,cascade=CascadeType.ALL)
@MapKey(name="taskName")
private Map<String, Task> tasks = Maps.createHash();
于 2012-07-26T11:48:22.173 回答