where dldbaddres0_.PERSID=26801@Id @Column(name = "PERSID", insertable = false, updatable = false)
您将PERSID定义为@Id,这是一个主键。它对于您的应用程序来说真的很独特吗?从行为来看不是。但是对于希伯来说一定是。
那么会发生什么:
- 您在数据库中有两个以上的记录,PERSID = 26801
- 您查询他们WHERe PERSID = 26801
- SQL查询返回两行以上
- Hib将第一个加载并进入会话,并以PERSID作为键(因为它被标记为@Id)。对象被放入结果列表。
- Hib加载第二个,注意会话中已经有一个具有相同@Id的对象,并将引用放入结果列表中。行数据将被忽略。
- 这样就得到了两个以上的副本。



