我正在将带有 JPA(Hibernate) 的 Java Enterprise Edition 用于服务器客户端应用程序(通过 EJB)。 该程序在数据库中存储了大量需要传输到客户端的数据。 因为我想传输尽可能少的数据,所以我不想传输对象两次。
我想用一个小例子来演示我的问题:
数据库:
[User]
- UserID (PK)
- Name
- Adress (FK)
[Adress]
- AdressID (PK)
- Street
Sample data:
[User:1, Max, 1]
[User:2, Peter, 2]
[Adress:1, Mainstreet]
[Adress:2, Riverstreet]
现在我想将所有用户的列表(以及预先加载的地址)传输到客户端以及所有地址的列表。
服务器端创建列表:
用户列表:
Query q = manager.createQuery("select u from UserBean m LEFT JOIN FETCH u.adress");
List<UserBean> l = (List<UserBean>) q.getResultList();
return l;
地址列表:
Query q = manager.createQuery("select a from AdressBean m");
List<AdressBean> l = (List<AdressBean>) q.getResultList();
return l;
当客户端获取列表时,我检查 user1.getAdress().hashCode()
和 adress1.hashCode()
的哈希码。
结果是不相等,因此在获取列表时该对象必须保存两次并且传输两次。
是否可以告诉(也许在 EJB 中)仅传输对象一次并传输正确的引用?或者我可以改进我的转移机制吗?
非常感谢! 彼得31280
最佳答案
如果您的客户端在不同的虚拟机中运行,则无法传输相同的实例。默认情况下,反序列化会创建对象的新实例。
因此,您最好在类上重写 hashCode()
和 equals()
。
关于java - 通过 EJB/JPA(Hibernate) 仅传输一次对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3830032/