Java 删除关联多对多关系

Java 删除关联多对多关系,java,hibernate,Java,Hibernate,我得到了两个对象(事件和客户)之间的以下映射: //In the customer object private List<Events> events = new ArrayList<Events>(); @ManyToMany(cascade=CascadeType.ALL,fetch=FetchType.LAZY) @JoinTable(name="Customers_Events", joinColumns = @JoinColumn(name="CUST

我得到了两个对象(事件和客户)之间的以下映射:

//In the customer object
private List<Events> events = new ArrayList<Events>();
@ManyToMany(cascade=CascadeType.ALL,fetch=FetchType.LAZY)
@JoinTable(name="Customers_Events",
    joinColumns = @JoinColumn(name="CUSTOMER_ID", referencedColumnName="PK"),
    inverseJoinColumns = @JoinColumn(name="EVENTS_ID", referencedColumnName="PK")
)
@OrderColumn
public List<Events> getEvents() {
    return events;
}

//in the Events object
private List<Customer> customers = new ArrayList<Customer>();
@ManyToMany(mappedBy="events", fetch=FetchType.LAZY)
public List<Customer> getCustomers() {
    return customers;
}
在我的控制器中,我只需执行以下操作:

Customer customer = customerService.getCustomerWithEvents(aPk);
Events event = eventsService.getEventWithCustomers(eventPk);
customer.getEvents().remove(event);
event.getCustomers().remove(customer);

customerService.saveOrUpdate(customer);
eventsService.saveOrUpdate(event);
因此,代码不会删除该关系。例如,当我这样做时:

bool = false;
if(customer.getEvents().contains(event)) {
    bool = true;
}

它总是返回false。似乎我无法从列表中删除对象,因为hibernate无法以某种方式匹配它们?关于如何删除多对多关联关系有何想法?

您是否覆盖了Customer和Events中的equals和hashCode方法?实体中是否有自定义的compareTo或equals方法?您好,10x。没有。我从不这样做。另外,我发现只有当您要使用集合而我不使用集合时,才需要实现hashCode和equals?我使用列表。你知道推荐的实现方法是什么吗?@george你可以尝试基于实体标识符实现equals/hashCode。请参阅以获取示例。@sp00m是的,我做到了。而且效果很好。我唯一担心的是hibernate说我们必须使用业务密钥而不是ID密钥,但由于我使用的是列表而不是设置,因此我可能有重复项等,因此除了hibernate生成的ID标识符之外,我没有任何业务密钥可以区分我的对象。你对此有什么建议吗?
bool = false;
if(customer.getEvents().contains(event)) {
    bool = true;
}