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

标签 java hibernate jpa

我有一个实体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/

相关文章:

java - 在 TextArea JAVA 中读取文件

java - 使用 hibernate 注解在 Java 中映射子类列表

hibernate - JPA2 中分离对象的问题

java - 在 JPQL 中选择新的

java - 单个实体中多个外键的 Spring DATA JPA 示例

java - 如何协调 J2EE 和 Java EE 数据库访问?

java - 具有多个 Activity 和 fragment 的 Android Manifest 已严重损坏!我该如何修复它们?

java - Jsoup 在 span 中获取带有部分类名的类

java - Android BLE 中未调用 onBatchScanResults

java - 您可以将 ehcache 2.1.0 与 Hibernate 3.3.x 一起使用吗