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",然后再输出应该就会在第一条语句时查询所有内容,而第二条就不会再查询了。

    评论

报告相同问题?

悬赏问题

  • ¥15 运筹学排序问题中的在线排序
  • ¥15 关于#flink#的问题:关于docker部署flink集成hadoop的yarn,请教个问题flink启动yarn-session.sh连不上hadoop
  • ¥30 求一段fortran代码用IVF编译运行的结果
  • ¥15 深度学习根据CNN网络模型,搭建BP模型并训练MNIST数据集
  • ¥15 lammps拉伸应力应变曲线分析
  • ¥15 C++ 头文件/宏冲突问题解决
  • ¥15 用comsol模拟大气湍流通过底部加热(温度不同)的腔体
  • ¥50 安卓adb backup备份子用户应用数据失败
  • ¥20 有人能用聚类分析帮我分析一下文本内容嘛
  • ¥15 请问Lammps做复合材料拉伸模拟,应力应变曲线问题