我意识到使用GWT和Hibernate我必须使用与Hibernate类几乎相同的DTO(数据传输对象)对象(假设我没有使用Gilead或Dozer或一些其他的lib)。gwt休眠一对多数据提取
所以,如果我举个例子,有以下实体:
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作为后缀他们的名字。
简短的问题是: 从Hibernate对象中获取DTO对象的最佳方式是什么?
说明: 如您所见,每个银行都包含多个BankAccounts,并且每个BankAccount都引用它所属的银行。
所以我不能制作虚拟硬拷贝构造函数,因为它意味着大量的手动和复杂的工作(可能不是这个简单的例子,但问题变得复杂,因为涉及新的实体)。
如果我想所有的公司,我会做这样的事情:
//necessary Hibernate Stuff
List<Company> companies = new ArrayList<Company>(s.createQuery("from Company").list());
现在我只有公司在休眠的对象,但我也需要他们的尊重城市,银行账户和银行自己的账户属于。此外,我必须将所有这些复制到DTO对象,但我想避免重复。
我该怎么做?
如何将多组银行,帐户,城市,公司的多个类中包含对象的引用作为DTO对象返回到整个这些类中?
我不能在DTO对象中创建复制构造函数,因为我可能会创建无限递归,如果我确实避免了这种情况,我不知道如何不创建重复项。
我希望我很清楚,并没有自己创建重复(有几个问题,但没有看到一些与GWT(DTO)对象)。
我想在我的项目中使用hibernate。我仍然可以使用hibernate获取数据库数据,并使用RequestFactory进行数据传输? – nekome
是的,你可以在'Hibernate'中使用'RequestFactory'。事实上'RequestFactory'被设计用于任何持久性框架。 –