使用JPQL从地图中删除

时间:2012-11-14 12:26:00

标签: hibernate jpa jpql

我有这些实体:

@Entity
public class ActiveQuest {

    @OneToMany(orphanRemoval=true,cascade=CascadeType.ALL,mappedBy="activeQuest")
    @MapKey(name="task")
    private Map<String, ActiveTask> activeTasks = Maps.createHash();

}

@Entity
public class ActiveTask implements Serializable {

    @ManyToOne(optional=false)
    private ActiveQuest activeQuest;

}

从我当前正在执行的ActiveTask中删除ActiveQuest

final ActiveQuest aq = em.find(....);
aq.getActiveTasks().remove(task);

我可以使用单个JPQL查询更快地执行相同操作(无提取)吗?

2 个答案:

答案 0 :(得分:0)

是。 JPQL specification甚至有一些例子

 DELETE FROM Publisher pub WHERE pub.revenue > 1000000.0

答案 1 :(得分:0)

我意识到如果我只是从任务的一边查看它而不是任务,我根本不需要考虑Map。

DELETE FROM ActiveTask t WHERE t.activeQuest = :quest AND t.task = :taskname