Я понимаю, что используя GWT и Hibernate, я должен использовать объекты DTO (Data Transfer Objects), которые почти идентичны классам Hibernate (допустим, я не использую Gilead, Dozer или какую-то другую библиотеку).
Так что, если у меня, например, есть следующие объекты:
Company (id, name, city_id),
Bank (id, name),
BankAccount(id, account, bank_id, company_id),
City(id, name)
, поэтому в городе может быть несколько компаний, и в банке (необходимо), и в компании (может) имеется несколько банковских счетов.
Что-то вроде:
Bank -< BankAccount >- Company >- City
Это атрибуты моих классов гибернации и DTO
class Company{
int id;
String name;
City city;
Set<BankAccount> accounts;
//with appropriate getters and setters
}
class Bank{
int id;
String name;
Set<BankAccount> accounts;
//with appropriate getters and setters
}
class BankAccount{
int id;
String account;
Bank bank;
Company company;
//and all get set
}
class City{
int id;
String name;
//all get set
}
Классы DTO одинаковы и имеют только DTO в качестве суффикса для своих имен.
Короткий вопрос:
Каков наилучший способ получения объектов DTO из объектов Hibernate?
Объяснение:
Как видите, каждый банк содержит несколько банковских счетов, и каждый банковский счет имеет ссылку на банк, которому он принадлежит.
Так что я не могу создавать фиктивные конструкторы печатных копий, потому что это потребовало бы много ручной и сложной работы (возможно, не для этого простого примера, но проблема усложняется, когда участвуют новые сущности).
Если я хочу получить все компании, я бы сделал что-то вроде:
//necessary Hibernate Stuff
List<Company> companies = new ArrayList<Company>(s.createQuery("from Company").list());
Теперь у меня есть только компании в спящих объектах, но мне также нужны их уважаемые города, банковские счета и банки, к которым принадлежат их счета. Также я должен скопировать все это в объект DTO, но я хочу избежать дубликатов.
Как мне это сделать?
Как вернуть несколько наборов банков, счетов, городов, компаний в нескольких классах, которые содержат ссылки на объекты, которые не дублируются в этих классах, в качестве объектов DTO?
Я не могу создавать конструкторы копирования в объектах DTO, потому что я могу создать бесконечную рекурсию, и если я каким-то образом избегаю этого, я не знаю, как бы мне не создавать дубликаты.
Надеюсь, я был понятен и не создавал дубликат сам (есть несколько вопросов, но я не видел некоторые с объектами GWT (DTO)).