Hibernate 对象的状态

Hibernate 中对象会分为三种状态:瞬时(transient),持久(Persistent),脱管(Detached)。

save/persist/saveorUpdate: transient state -> Persistent state

transaction.commit: Persistent state -> Database

Session.close: Persistent state -> Detached state

对于对象比较有两种方法:
(1) == 操作符比较内存地址
(2) equals和hashcode比较对象的哈希值

那么针对Hibernate中Session的对象来说,根据情况不同,选择的比较方法就会不同:
(1)在同一session中,由相同主键值加载的对象,是指向同一地址,可以用==比较
(2)在不同session中,由相同主键值加载的对象,是指向不同的地址,应该用equals比较
两种情况下面,由相同主键值加载的对象,都是指的是数据库同一条记录。

为了比较,我们常常需要在POJO对象中重载equals和hashcode两个方法。在这个类中定义的属性比较多的话, 有两个常用的工具类EqualsBuilder和HashCodeBuilder来帮助我们简化工作量。

你可能感兴趣的:(Hibernate,工作)