按我的要求,我一直在使用,我想用下面的代碼標識被改變
更新/重新分配經理到客戶的客戶和經理class CustomerEntity{
@ManyToOne
@JoinColumn(name = "manager_id", referencedColumnName = "id")
private ManagerEntity manager;
}
class ManagerEntity{
@OneToMany(mappedBy = "manager", fetch = FetchType.LAZY)
private List<CustomerEntity> customerlist;
}
現在之間JPA創建多對一關係
public void updateManager(Customer customer) throws Exception {
CustomerEntity customerEntity = customerDao.find(customer.getId());
ManagerEntity managerEntity = userDao.find(customer.getManagerId());
customerEntity.setManager(managerEntity);
getSession().update(entity);
}
但同時節省我得到以下
提到的異常產生的原因:org.hibernate.HibernateExcepti on:ManagerEntity的一個實例的標識符從10改爲15
根據例外情況,我可以理解它試圖更新ManagerEntity中的行,即子表,但我不想在ManagerEntity中進行任何更新,只有任何現有ManagerEntity應重新分配給CustomerEntity。
我試圖在CustomerEntity中提供CascadeType.MERGE或CascadeType.DETACH,但它不起作用。
任何人都可以給我建議正確的方法,而無需更新ManagerEntity即子實體更新CustomerEntity實體即父
你做** customerEntity.getManager()的setName( 「新名字」)**客戶應具備的經理,所以你don'。不得不從DB中檢索。在我看來,您正在更新的經理實體與客戶的經歷並不一樣,並且休眠抱怨 – kimy82
爲什麼要單獨獲取ManagerEntity?當你獲取CustomerEntity時,它也應該獲取管理器。因此不需要在客戶實體中設置經理。將獲取類型更改爲渴望並查看您的代碼是否與客戶一起獲取經理。 –
它看起來是正確的,除非你在.setManager方法中做了一些奇怪的事情,你能顯示代碼嗎? – jorgegm