我是hibernate
和ORM
的新手,我有疑问:
我有三个poco / pojo类,并从这些类生成表。
OrdersClass
{
OrderNumber
Date
Sum
*Products
*Employee
}
ProductClass
{
ProductName
Price
}
EmployeeClass
{
FirstName
LastName
}
我想将这些表格的混合显示在网格中。所以网格列将是:
OrdersClass.OrderNumber
,Emplyee.FirstName
。
所以我的问题是:
我应该创建一个模拟网格视图的新实体:
EntityForGrid
{
OrderNumber
FirstName
}
或者我应该基于poco类和加载数据,即
var orders = session.CreateQuery("from Orders WHERE something").List<Orders>();
var employee = session.CreateQuery("from Employee WHERE something").List<Employee>();
所以所有数据都像数据库一样映射。
答案 0 :(得分:0)
我不确定你是如何完成映射的,但是如果它已经正确完成你应该在你的Orders类中有一个名为“getEmployee”的getter
您可以查询符合您的WHERE的所有订单,而不是每个条目调用“getEmployee”来获取相应的员工。通过这种方式,你可以得到一个关系......用你的两个选择来获得很多技巧。
或者,如果你喜欢,你可以得到这样的东西(在Java中)
final String query= "select o.num, e.first from Order o join o.employee where something";
List<Object[]> result= (List<Object[]>) sessionFactory.getCurrentSession().createQuery(query).list();
(我想你是在使用C#或其他东西,所以你需要把它转换成它。)
现在你有一个对象列表,每个对象包含两个字符串值,这些将是你的结果。
基本上,如果您使用这样的ORM,它类似于直接数据库连接。当你能够使用我的第一个提案时,就会有力量
答案 1 :(得分:0)
您的订单类是汇总的。因此,您可以将ICollection绑定到网格。第一列将绑定到Order.OrderNumber,第二列将绑定到Order.Employee.FirstName。雇主你可以使用查询订单获取一个查询,或者你可以使用延迟加载雇主集合。这取决于你的获取策略。