标签:
在一般的增删改查中我们有时候不需要查询一个类的所以属性,我们仅仅需要部分属性。如果是全部查询将会非常浪费你的时间(确切是客户的时间)。因此投影查询在Hibernate中应运而生。我们还是用例子来说明问题。
先创建我们所需要的两个po类,一个客户,一个订单,在这里是一对多的关系。
public class Customer { private Integer id; private String name; private Set<Order> orders=new HashSet<Order>(); public Customer() { super(); } public Customer(Integer id, String name) { super(); this.id = id; this.name = name; } public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public Set<Order> getOrders() { return orders; } public void setOrders(Set<Order> orders) { this.orders = orders; } @Override public String toString() { return "Customer [id=" + id + ", name=" + name + ", orders=" + orders + "]"; } }
public class Order { private Integer id; private Double price; private Customer c; public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } public Double getPrice() { return price; } public void setPrice(Double price) { this.price = price; } public Customer getC() { return c; } public void setC(Customer c) { this.c = c; } @Override public String toString() { return "Order [id=" + id + ", price=" + price + "]"; } }
<!-- 持久化类与数据表的映射关系 --> <!-- 联合主键配置方式 --> <hibernate-mapping> <class name="com.canyugan.onetomany.Customer" table="customer"> <id name="id"> <generator class="increment"/> </id> <property name="name"/> <!-- 设置级联 当保存顾客时也会保存订单 --> <!-- inverse=true 则由关联的对方维护 --> <set name="orders" cascade="all-delete-orphan" inverse="true"> <key column="cid"/> <one-to-many class="com.canyugan.onetomany.Order" /> </set> </class> </hibernate-mapping>
<hibernate-mapping> <class name="com.canyugan.onetomany.Order" table="orders"> <id name="id"> <generator class="increment"/> </id> <property name="price"/> <many-to-one name="c" class="com.canyugan.onetomany.Customer" column="cid"/> </class> </hibernate-mapping>
然后我们可以来测试:
先向数据库保存测试数据:
// 得到sesion Session session = HibernateUtils.getSession(); // 开启事务 session.beginTransaction(); Customer c=new Customer(); c.setName("Canyugan"); for(int i=0;i<10;i++) { Order o=new Order(); o.setPrice(3000d+i); c.getOrders().add(o); } session.save(c); // 提交事务 session.getTransaction().commit(); session.close();
// 得到sesion Session session = HibernateUtils.getSession(); // 开启事务 session.beginTransaction(); List<List<Object[]>> list=session.createQuery("select new List(id,name) from Customer").list(); System.out.println(list); // 提交事务 session.getTransaction().commit(); session.close();
标签:
原文地址:http://blog.csdn.net/u012881836/article/details/51366333