我使用HashSet,我需要修改一个对象的ID,但它改变了hashcode并破坏了HashSet和hashCode()方法的规则.
什么是最佳解决方案:从Set中删除对象并使用新ID添加对象,或者在Set中的每个对象中保留哈希代码(例如,在构造函数中生成),还是有其他方法可以解决此问题?
感谢帮助.
更新:我犯了错误:在对象中保留哈希代码很糟糕,因为在这种情况下,相等的对象可以有不同的哈希代码.
我有两个这样的实体:
public class Client {
...
@OneToMany(mappedBy = "client", cascade = { CascadeType.DETACH, CascadeType.MERGE, CascadeType.REFRESH, CascadeType.REMOVE },orphanRemoval = true, fetch=FetchType.EAGER)
@Fetch(value = FetchMode.SUBSELECT)
@Cascade({ org.hibernate.annotations.CascadeType.SAVE_UPDATE, org.hibernate.annotations.CascadeType.DELETE_ORPHAN })
private List<CompanyContract> companyContracts;
...
}
Run Code Online (Sandbox Code Playgroud)
公司合同:
public class CompanyContract {
...
@ManyToOne
@JoinColumn(name = "IDCLIENT")
private Client client;
...
}
Run Code Online (Sandbox Code Playgroud)
我想删除这样的 companyContract :
client.getCompanyContracts().remove(companyContract)
client = clientService.updateClient(client);
Run Code Online (Sandbox Code Playgroud)
但是删除过程没有发生
我究竟做错了什么 ?
编辑
这是我的 DAO 中的 updateClient 方法:
@Override
@Transactional
public Client updateClient(Client client) {
return entityManager.merge(client);
}
Run Code Online (Sandbox Code Playgroud)