请参见JBoss社区网站上的"Equals and HashCode"。从那里开始: 为了避免这个问题,我们建议使用持久类的“半”唯一属性来实现equals()(和hashCode())。基本上,您应该认为您的数据库标识符根本没有业务含义(请记住,推荐使用代理标识符属性和自动生成的值)。数据库标识符属性只应用于对象标识符,并且基本上仅由Hibernate使用。当然,您也可以将数据库标识符用作方便的只读句柄,例如在Web应用程序中构建链接。 换句话说,Hibernate使用equals和hashCode进行标识,而不是查看对象是否已被修改。它对此使用属性对属性的比较。