我在 Java 项目 RMI + Hibernate 中使用,我遇到了与 NotUniqueException 相关的问题,并出现错误“具有相同标识符的不同对象”。
我有几个疑问:
- 我很确定我不会复制或创建具有相同标识符的新对象。当我使用 RMI 时,是否有可能从另一个对象创建一个新对象? 
- 哪种方法使用 Hibernate 知道两个对象是相同的?等于? 
- 我知道 Serializable 与 Hibernate 有关,但我不知道以什么方式? 
- 如何同时使用 RMI 解决“不同对象错误”? 
- 每次我使用删除或保存对象之前使用合并时是否正确? 
堆栈跟踪是:
org.orm.PersistentException: org.hibernate.NonUniqueObjectException: a different object with the same identifier value was already associated with the session: [dcl.Administrador#10]
    at org.orm.PersistentSession.saveOrUpdate(PersistentSession.java:648)
    at org.orm.PersistentManager.saveObject(PersistentManager.java:274)
    at dcl.AdministradorDAO.save(AdministradorDAO.java:240)
    at dcl.BdAdministrador.guardarAdministrador(BdAdministrador.java:62)
    at dcl.BdAdministrador.actualizarAdministrador(BdAdministrador.java:109)
    at dcl.BdPrincipal.actualizarAdministrador(BdPrincipal.java:555)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
    at java.lang.reflect.Method.invoke(Unknown Source)
    at sun.rmi.server.UnicastServerRef.dispatch(Unknown Source)
    at sun.rmi.transport.Transport$1.run(Unknown Source)
    at java.security.AccessController.doPrivileged(Native Method)
    at sun.rmi.transport.Transport.serviceCall(Unknown Source)
    at sun.rmi.transport.tcp.TCPTransport.handleMessages(Unknown Source)
    at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run0(Unknown Source)
    at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run(Unknown Source)
    at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(Unknown Source)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
    at java.lang.Thread.run(Unknown Source)
提前致谢。