qq_33409208
qq_33409208
采纳率0%
2017-10-23 15:05 阅读 1.0k

关于Hibernate懒加载和get方法的奇怪问题

Hibernate中session.get方法是不支持懒加载的,但是进行如下的配置得到的结果却
和预期不一样,没找到原因呢,谁能解释一下。
** 1.定义Customer类**
public class Customer implements java.io.Serializable {
//Customer中有一个orders集合
private Set orders=new HashSet();
2. 在Customer.hbm.xml中作如下配置




3.运行如下的程序
Session session=HibernateSessionFactory.getSession();
Customer cs=(Customer)session.get(Customer.class,"c001");
System.out.println(cs.getName());
System.out.println("------------------");
System.out.println(cs.getOrders());

    **4.按照原理分析这里的get方式不支持懒加载,后台应该连着输出两条SQL语句,但实际情况如下:**

Hibernate: select customer0_.id as id1_0_, customer0_.name as name1_0_, customer0_.age as age1_0_, customer0_.sex as sex1_0_, customer0_.city as city1_0_ from simple.customer customer0_ where customer0_.id=?

张宇

Hibernate: select orders0_.cid as cid1_, orders0_.orderid as orderid1_, orders0_.ord
也就是说执行get时只输出了第一条语句,而执行cs.getOrders()时又执行了第二条SQL,这不就是懒加载么,谁能谈谈是再怎么回事?

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 复制链接分享

2条回答 默认 最新

  • paditang paditang 2017-10-24 00:53

    看不到你hbm.xml中的内容,load和get的懒加载是针对一般属性的懒加载。但是对于类中的集合属性,默认是懒加载的。
    你可以尝试在配置文件中把orders设置lazy="false",然后再输出应该就会在第一条语句时查询所有内容,而第二条就不会再查询了。

    点赞 评论 复制链接分享
  • qq_36247781 孤独bye 2017-12-17 15:04

    那是一个集合属性。你可以在lazy=true的情况下,把get方法和load方法的运行大致看一下就会发现他们在对cs.getOrders()语句的处理是一样的(应该是一样的,记不太清楚了),其余还在研究当中,就当做提供个思路吧。

    点赞 评论 复制链接分享

相关推荐