持久类模型

时间:2012-01-29 15:02:46

标签: hibernate nhibernate

我是hibernateORM的新手,我有疑问:

我有三个poco / pojo类,并从这些类生成表。

OrdersClass
{
 OrderNumber
 Date
 Sum
 *Products
 *Employee
}

ProductClass
{
 ProductName
 Price
}

EmployeeClass
{
 FirstName
 LastName
}

我想将这些表格的混合显示在网格中。所以网格列将是: OrdersClass.OrderNumberEmplyee.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>();

所以所有数据都像数据库一样映射。

2 个答案:

答案 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。雇主你可以使用查询订单获取一个查询,或者你可以使用延迟加载雇主集合。这取决于你的获取策略。