Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/hibernate/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Hibernate标准API确切用法与关联_Hibernate_Jpa_Hibernate Criteria - Fatal编程技术网

Hibernate标准API确切用法与关联

Hibernate标准API确切用法与关联,hibernate,jpa,hibernate-criteria,Hibernate,Jpa,Hibernate Criteria,我有两张桌子:1.顾客桌2.订单桌。 表之间存在一对多映射,其中一个客户可以有多个订单。customer_id是customer表的主键和Order表的外键。 my Customer.hbm.xml文件的一个片段: enter code here <set name="orders"> <key column="Customer_id" /><!-- Customer_id acts as foreign key for Order tab

我有两张桌子:1.顾客桌2.订单桌。 表之间存在一对多映射,其中一个客户可以有多个订单。customer_id是customer表的主键和Order表的外键。 my 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>
据我所知,Hibernate将对这两个表执行内部联接,并返回与上述两个条件匹配的列表

在此之后,我的要求是从resultset(本例中为列表)中获取orderDescriptions


为了达到这个目的,我到底需要编写什么java代码?

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

Iterator it=list.iterator();
while(it.hasNext()) {
System.out.println(it.next());//Yout can write your own implemantation
}

我建议将结果转换为
列表
,这将使访问
客户
字段更容易

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

这个答案假设
Customer
包含一个
列表
,并且
订单
实体有一个
描述
字段。

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

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();

@Kevin…在论坛上发布这篇文章之前,我已经尝试过你建议的方法。这种方法的问题是内部for循环将生成一个新的HQL,如下所示:
   for(Customer customer: list){
       for(Order order: customer.getOrders()){
          order.getDescription(); //pseudo code since entities were not revealed
       }
   }
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();
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
}