0

Quest私は多くのsを含むエンティティを持っています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 = ...ように見えます。これは、クエスト自体が削除されたときに何かを行うように思えます(そうではありません)。いずれにせよ、それは何もヌルにするべきではなくDELETETask完全にすべきです。

なにが問題ですか?

4

1 に答える 1

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();
于 2012-07-26T11:48:22.173 に答える