2013-04-05 128 views
1

我有3個表:JPA更新不工作一個多一對多的關係

  • customer(idCustomer,...)
  • is_managed(idCustomer,idPerson)
  • sales_person(idPerson,...)

customer之間的關係@ManyToManysales_person

當我執行刪除時,它工作正常:刪除customer,is_managedsales_person

但是,當我執行更新,然後customeris_managed被更新,但sales_person沒有。

例如,如果我通過刪除sales_person更新customer,它將在表is_managed中刪除,但在sales_person表中不會刪除。

這是如何造成的,我該如何解決?

下面是相關代碼:

// update customer 
public String updateCustomer(Customer customer,ArrayList<Sales_person> sales_persons,ArrayList<Involved_group_relation> involved_groups, Macro_market macro_market)throws IOException { 

    // insert the sales_person attached to the customer 
    ArrayList<Sales_person> sales_personC = new ArrayList<Sales_person>(); 
    sales_personC.addAll(sales_persons); 

    customer.setSalesPersons_BelongTo(sales_personC); // insert in customer the sales_persons 

    em.merge(customer); 
    return customer.getNameCustomer(); 
} 

// entity customer 
@Entity 
@Table(name="customer") 
public class Customer implements Serializable { 

    private static final long serialVersionUID = 1L; 

    @Id 
    @GeneratedValue(strategy = GenerationType.IDENTITY) 
    private Long idCustomer; 

    private String titleTypeAccount; 
    private String nameCustomer; 

    /** RELATIONS **/ 
    // CUSTOMER - SALES_PERSON 
    @ManyToMany(
      cascade={CascadeType.ALL} 
    ) 
    @JoinTable(
     name="is_managed", 
     [email protected](name="idCustomer"), 
     [email protected](name="idPerson") 
    ) 
    private Collection<Sales_person> salesPersons_BelongTo; 
     ... 
     ... 

// entity sales_person 
@Entity 
@Table(name="sales_person") 
public class Sales_person implements Serializable { 

    private static final long serialVersionUID = 1L; 

    @Id 
    private Long idPerson; 

    private String nameSalesPerson; 
    private String jobFunction; 
    private String titleOrganization; 

    @ManyToMany(
     mappedBy="salesPersons_BelongTo" 
    ) 
    private Collection<Customer> customers; 
    ... 
    ... 
+0

請發佈相關代碼 – kostja 2013-04-05 13:56:05

+0

如果您展示瞭如何在JPA中定義關係,則對JPA用戶更有幫助。 – BalusC 2013-04-05 14:03:26

+0

您的實體如何註釋?你使用什麼級聯行爲?你使用orphanRemoval嗎?很多問題都可以通過向我們展示實體代碼(或DD,如果您使用它)來回答...... – 2013-04-05 14:04:28

回答

0

如果你想銷售人員從數據庫中刪除,那麼你就必須調用em.remove()的營業員。調用merge()是不夠的。另外,如果您希望SalesPerson的更改被合併,您還必須在SalesPerson上調用merge(),或者在salesPersons_BelongTo關係上設置級聯合並。

同時確保您保持雙向關係的雙方,而不僅僅是一方。

+0

「確保你保持雙向關係的雙方」是什麼意思?我怎樣才能做到這一點?感謝的 – 2013-04-09 07:27:02

+0

,即如果你添加到一邊,你還必須添加到另一邊。此外,如果對象被分離並且您改變了雙方,那麼您必須合併雙方。 – James 2013-04-09 13:50:20

+0

它現在可以工作了,我將我的舊收藏與Sales_person上新的和使用的em.remove進行了比較。謝謝! – 2013-04-09 14:13:24