Hibernate标准API确切用法与关联
我有两张桌子:1.顾客桌2.订单桌。 表之间存在一对多映射,其中一个客户可以有多个订单。customer_id是customer表的主键和Order表的外键。 my Customer.hbm.xml文件的一个片段: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
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
}