我有时会注意到我的父/子对象或多对多关系,我需要调用SaveOrUpdate或者Merge.通常,当我需要调用时,我调用SaveOrUpdate的异常Merge与不首先保存的瞬态对象有关.
请解释两者之间的区别.
从这个SO答案:
update()方法强制更新到数据库中对象的持久状态,始终调度SQL UPDATE。...在将项目对象传递给update()之前或之后进行修改都没有关系。... Hibernate始终将对象视为脏对象,并计划将在刷新期间执行的SQL UPDATE.。另一方面,merge()首先查询数据库,如果状态未更改,则不执行更新。
我想到一个疑问:
Hibernate(或任何JPA实现)如何判断实体的状态是否已更改,从而需要进行更新操作?
我们应该实现equals或hashcode方法来帮助Hibernate做到这一点吗?如果不实现这些方法怎么办?