Я использую 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