0

我有两个表:1.Customer_Table 2.Order_Table。表之间存在一对多的映射关系,一个客户可以有多个订单。Customer_id 是 Customer 表的主键和 Order 表的外键。我的 Customer.hbm.xml 文件的片段:

enter code here

    <set name="orders">
        <key column="Customer_id" /><!-- Customer_id acts as foreign key for Order table -->
        <one-to-many   class="Order" />
    </set>

.... 我在我的 Retreive.java 文件中编写了以下代码片段,以获取以下客户的一些订单: 1.客户名称应以 Rahul 开头 2.客户订单描述应为“电子”类型

Criteria criteria1 = session.createCriteria(Customer.class).
        add(Restrictions.like("customerName", "Rahul%"));`
Criteria criteria = criteria1.createCriteria("orders").add(Restrictions.like("orderDescription", "electronics%"));
List list = criteria.list();

根据我的理解,Hibernate 将对两个表执行内部联接并返回与上述两个条件匹配的列表。

在此之后,我的要求是从结果集中获取 orderDescriptions(在本例中为 List)。

我到底需要写什么java代码来达到这个目的???

4

3 回答 3

1

终于能够解决我关于获得一组受限关联而不是整个关联的问题。希望下面的代码片段有所帮助。

Criteria criteria1 = session.createCriteria(Customer.class).
    add(Restrictions.like("customerName", "Rahul%"));`
Criteria criteria = criteria1.createCriteria("orders","order").add(Restrictions.like("orderDescription","electronics%")).setResultTransformer(Criteria.ALIAS_TO_ENTITY_MAP);//order is alias to orders collection
List<Map> list = criteria.list();

使用 setResultTransformer 我们得到一个包含内部连接结果的 Map 列表,而不是更传统的 Customer 列表。

for(Iterator itr = list.iterator();itr.hasNext();){
Map map = (Map)itr.next();
Customer student = (Customer) map.get(Criteria.ROOT_ALIAS);
Order order = (Order) map.get("order");//alias that was used earlier for orders
}
于 2013-09-14T09:28:00.080 回答
0

我建议将结果转换为 aList<Customer>应该使访问字段Customer更容易。

List<Customer> list = (List<Customer>)criteria.list();

然后遍历列表,通过访问器方法访问订单/描述:

   for(Customer customer: list){
       for(Order order: customer.getOrders()){
          order.getDescription(); //pseudo code since entities were not revealed
       }
   }

这个答案假设Customer包含 aList<Order>并且Order实体有一个description字段。

于 2013-09-08T09:13:04.623 回答
0

您可以使用迭代器从列表中获取数据。此代码将有助于迭代您的列表数据。

Iterator it=list.iterator();
while(it.hasNext()) {
System.out.println(it.next());//Yout can write your own implemantation
}
于 2013-09-08T09:03:06.637 回答