Передача объектов только один раз через EJB / JPA (Hibernate) - PullRequest
1 голос
/ 30 сентября 2010

Я использую Java Enterprise Edition с JPA (Hibernate) для приложения сервер-клиент (через 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;

Adresslist:

Query q = manager.createQuery("select a from AdressBean m");
List<AdressBean> l = (List<AdressBean>) q.getResultList();
return l;

Когда клиент получает списки, я проверяю хеш-коды user1.getAdress().hashCode() и adress1.hashCode(). В результате он не равен, поэтому объект должен быть сохранен дважды, а также дважды передан при получении списков.

Можно ли сказать (может быть, в EJB) передавать объекты только один раз и передавать правильные ссылки? Или я могу улучшить свой механизм передачи?

Большое спасибо! Peter31280

1 Ответ

2 голосов
/ 30 сентября 2010

Нельзя передавать одни и те же экземпляры, если ваш клиент работает на другой виртуальной машине.Десериализация по умолчанию создает новые экземпляры объектов.

Так что вам лучше переопределить hashCode() и equals() для ваших классов.

...