java - 通过 EJB/JPA(Hibernate) 仅传输一次对象

标签 java jpa jakarta-ee ejb-3.0

我正在将带有 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/

相关文章:

java - sipFactory.setPathName ("gov.nist");运行时错误

原始类型的 java : Understanding Arrays. asList(T...array) 方法

java - 一个 Web 应用程序中特定的多个 SAXParserFactory 实现

java - 执行什么代码

java - 如何在eclipse中创建Maven项目

java - JPA 在 3 个级别上获取

jpa - NPE 抛出 JAX-RS 中的编码实体

java - Sql关键字用法作为jpa实体列名

java - 在实体管理器上调用合并后实体丢失状态

java - 使用 REST 上传多个文件