2017-01-12 106 views
1

我有兩個對象用戶工作單號。一個用戶可以有多個工單。問題是,當我刪除用戶時,它也會將分配的工單刪除給該用戶。在刪除用戶之前,我已嘗試將我的工作訂單外鍵設置爲NULL,但仍會刪除與該用戶關聯的所有工單。我想在不刪除分配給用戶的工單的情況下刪除用戶。我錯過了什麼或做錯了什麼?在休眠狀態下無子女無法刪除父母

這裏是我的用戶等級:

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

工單類:

@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 =真',並檢查有沒有「級聯'在Workorder.user上(如果關係是雙向的)

+0

刪除它確實有幫助。現在它將外鍵設置爲NULL並刪除用戶。謝謝! – RomZes13

+0

不客氣:) –