首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > SQL Server >

Hibernate的对象检索计策 (一) SQL左外连接检索策略

2013-11-30 
Hibernate的对象检索策略 (一) SQL左外连接检索策略首先是测试表的结构:先通过hibernate将数据放入数据库,

Hibernate的对象检索策略 (一) SQL左外连接检索策略
首先是测试表的结构:



先通过hibernate将数据放入数据库,如下:



-以上select语句使用了SQL的左外连接查询功能,能够在一条select语句中查询出User表的所有记录,以及匹配的Order表的记录。

在Hibernate中, 多对一的关联配置文件中可以配置使用左外连接检索策略。
把Order.hbm.xml文件的<many-to-one>元素的outer-join属性设置为true,程序执行时就会自动使用左外连接检索策略。
运行结果如下:



通过此方法, 当运行下面的代码时:
Order order=(Order) session.get(Order.class, 1);System.out.println(order.getName());System.out.println(order.getUser().getName());


就只会像数据库发送一条左外连接的select语句,大大降低了数据库开销。
输出结果:
Hibernate: select order0_.id as id1_1_1_, order0_.test_name as test2_1_1_, order0_.customer_id as customer3_1_1_, user1_.id as id1_3_0_, user1_.test_name as test2_3_0_, user1_.test_age as test3_3_0_ from test_order order0_ left outer join test_user user1_ on order0_.customer_id=user1_.id where order0_.id=?
Tom_Order001
Tom



二. 在程序中显式指定左外连接策略检索
- 以下Session的方法都用于检索OID为1的User对象。
session.createQuery("from User as u where u.id=1");
session.createQuery("from User as u left join fetch u.orders where u.id=1");

在执行第一个方法时,Hibernate会使用映射文件配置的检索策略。
在执行第二个方法时,在HQL语句中显式指定左外连接检索关联的Order对象,因此会覆盖映射文件配置的检索策略。不管在User.hbm.xml文件中<set>元素的lazy属性是true还是false,Hibernate都会执行以下select语句:

select * from User left outer join Order on User.id = Order.customer_id where User.id=1;


热点排行