qq_33409208 2017-10-23 15:05 采纳率: 0%
浏览 1029

关于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 2017-10-24 00:53
    关注

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

    评论

报告相同问题?

悬赏问题

  • ¥30 matlab解优化问题代码
  • ¥15 写论文,需要数据支撑
  • ¥15 identifier of an instance of 类 was altered from xx to xx错误
  • ¥100 反编译微信小游戏求指导
  • ¥15 docker模式webrtc-streamer 无法播放公网rtsp
  • ¥15 学不会递归,理解不了汉诺塔参数变化
  • ¥15 基于图神经网络的COVID-19药物筛选研究
  • ¥30 软件自定义无线电该怎样使用
  • ¥15 R语言mediation包做中介分析,直接效应和间接效应都很小,为什么?
  • ¥15 Jenkins+k8s部署slave节点offline