2017-01-12 10 views
1

私は2つのオブジェクトを持っていますユーザーワークオーダー。 1人のユーザーが複数の作業指示を持つことができます。問題は、ユーザーを削除すると、そのユーザーに割り当てられた作業指示書も削除されることです。ユーザーを削除する前に作業指示の外部キーをNULLに設定しようとしましたが、そのユーザーとのすべての関連作業オーダーが削除されます。私は、ユーザーに割り当てられた作業指示書を削除せずにユーザーを削除したいと思います。何が欠けているのか、間違っているのですか?Hibernateで子なしの親を削除できません

@OneToMany(fetch = FetchType.LAZY, mappedBy="user", orphanRemoval=true) 
    private Set<WorkOrder> workOrder; 

WorkOrderはクラス:

ここにありますが、私のUserクラスである

@ManyToOne(fetch = FetchType.LAZY) 
    @JoinColumn(name="user_id", nullable = true) 
    private User user; 

UserDAOImplクラス:

@Override 
    public void deleteUser(int theId) { 
     // get the current hibernate session 

     Session currentSession = sessionFactory.getCurrentSession(); 

     // delete object with primary key 

     User user = currentSession.get(User.class, theId); 
     Set workorders = user.getWorkOrder(); 


     Iterator<WorkOrder> work = workorders.iterator(); 
     while (work.hasNext()){ 

      WorkOrder workorder = work.next(); 
      workorder.setUser(null); 
      } 

     currentSession.remove(user); 
    } 
+0

workOrderを新しいテーブルにコピーしてから、ユーザーを削除しますか? workOrderのコピーを作成して(新しいテーブルに保存する)、そのユーザーを削除します。ユーザーを削除すると、その作業オーダーも削除されます。しかし、あなたはworkOrderを新しいテーブルに保存しました –

+0

新しいテーブルを作成しなくても簡単な方法があります。 – RomZes13

答えて

0

その 'orphanRemoval = true' を削除して、NO「カスケードはありません確認してください'Workorder.user(関係が双方向の場合)

+0

それを取り外すと助けになりました。これで、外部キーがNULLに設定され、ユーザーが削除されます。ありがとうございました! – RomZes13

+0

あなたは大歓迎です:) –

関連する問題