我有3张桌子:
customer(idCustomer,...)
is_managed(idCustomer,idPerson)
sales_person(idPerson,...)
@ManyToMany
和customer
之间存在sales_person
关系。
当我执行删除时,它可以正常工作:customer
,is_managed
和sales_person
被删除。
但是当我执行更新时,customer
和is_managed
会更新,但sales_person
不会更新。
例如,如果我通过删除customer
更新sales_person
,则会在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",
joinColumns=@JoinColumn(name="idCustomer"),
inverseJoinColumns=@JoinColumn(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 :(得分:0)
如果要从数据库中删除SalesPerson,则必须在SalesPerson上调用em.remove()。调用merge()是不够的。
此外,如果您希望合并SalesPerson的更改,您还必须在SalesPerson上调用merge(),或者在salesPersons_BelongTo关系上设置级联合并。
同时确保你保持双向关系的两面,而不仅仅是一面。