rockbuffett 2008-09-08 11:37
浏览 194
已采纳

hibernate+Spring 无法读取实体对象属性

实体类代码如下:
[code="java"]public class Organization {
private int id;

private String name;

private String sn;

private String description;

private Organization parent;

private Set children;

get和set省略
}[/code]

业务实现类:
[code="java"]//删除机构
public void delete(int orgId) {
Organization org =(Organization)this.getHibernateTemplate().load(Organization.class, orgId);
System.out.println(org.getChildren().size());
}[/code]
[color=red][size=large]getchildren和getparent都无法读取,null

调用size导致空指针异常

但能顺利的读取description等属性

配置如下[/size][/color][code="java"]<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">














[/code]

  • 写回答

3条回答 默认 最新

  • icewubin 2008-09-10 15:26
    关注

    [quote]这位兄弟,他的引用都指出来了,这个事物是否关闭有什么关系啊。。。[/quote]

    这个引用是CGLib增强后的代理对象,根本就不是原来的对象。
    当代码调用org.getChildren().size()的时候会判断是否已经加载,如果lazy="false"的话就没问题,load的时候肯定是已经加载了。

    如果lazy="true"(默认)的话,代理对象发现没有加载过,触发sql语句加载children,但是发现session已经关闭了。

    哦,我明白了,这个时候因为没有Spring事务的保护,其实已经是Detached的对象了,因为laze="true",所以children是空的。

    提醒楼主,默认状态下getHibernateTemplate()中的方法都是会自动关闭session的,如果楼主要学习的话,请直接调用session的方法,而不要太依赖getHibernateTemplate(),如果是要正二八经的开发,请使用Spring的事务配置,给这段代码所在的方法加上事务。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

悬赏问题

  • ¥50 永磁型步进电机PID算法
  • ¥15 sqlite 附加(attach database)加密数据库时,返回26是什么原因呢?
  • ¥88 找成都本地经验丰富懂小程序开发的技术大咖
  • ¥15 如何处理复杂数据表格的除法运算
  • ¥15 如何用stc8h1k08的片子做485数据透传的功能?(关键词-串口)
  • ¥15 有兄弟姐妹会用word插图功能制作类似citespace的图片吗?
  • ¥200 uniapp长期运行卡死问题解决
  • ¥15 latex怎么处理论文引理引用参考文献
  • ¥15 请教:如何用postman调用本地虚拟机区块链接上的合约?
  • ¥15 为什么使用javacv转封装rtsp为rtmp时出现如下问题:[h264 @ 000000004faf7500]no frame?