我有两张桌子: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代码?
答案 0 :(得分: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列表,其中包含内部联接的结果,而不是更传统的客户列表。
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
}
答案 1 :(得分:0)
您可以使用Iterator从List中获取数据。 这段代码将用于迭代您的列表数据。
Iterator it=list.iterator();
while(it.hasNext()) {
System.out.println(it.next());//Yout can write your own implemantation
}
答案 2 :(得分:0)
我建议将结果投射到List<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
包含List<Order>
且Order
实体包含description
字段。