【发布时间】:2012-11-13 14:54:45
【问题描述】:
我们的堆栈:Tomcat 7、Spring 3.1.1、OpenJPA 2.2.0
我遇到了一个问题,根源是比较:
server1.equals(server2);
server1 和 server2 都是实体“服务器”的实例:
@Entity
public class Server implements Serializable {
private long id;
// getters and setters
}
我不得不将比较更改为:
server1.getId().equals(server2.getId());
那个有效,上面那个返回false,即使服务器的id是一样的。 我还检查了两个实例的 hashCodes,这两个实例确实有不同的 hashCode。
为什么我们的应用程序中有两个相同实体的实例?
怎么会这样?数据库中只有一个“服务器”实体。
谢谢!
塞巴斯蒂安
【问题讨论】:
-
@Transactional注释位于何处(在 DAO 中?),请发布代码,显示您如何加载实体以及如何比较它们。 -
svn.apache.org/viewvc/incubator/openmeetings/trunk/singlewebapp/… 是加载实体的 Dao。比较类似于上述方法。但是比较的代码在svn.apache.org/viewvc/incubator/openmeetings/trunk/singlewebapp/…第487行,如果你替换那个entry.getValue().getServer().equals(server)你永远不会得到true,你总是需要根据Id进行比较。
标签: java spring jpa entity openjpa