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

问题描述

实体类代码如下:public class Organization {private int id;private String name;private String sn;private String description;private Organization parent;private Set children;get和set省略}业务实现类://删除机构public void delete(int orgId) {Organization org =(Organization)this.getHibernateTemplate().load(Organization.class, orgId);System.out.println(org.getChildren().size());}getchildren和getparent都无法读取,null调用size导致空指针异常但能顺利的读取description等属性配置如下<?xml version="1.0"?><!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN""http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"><hibernate-mapping><class name="com.yourcompany.modle.Organization"><id name="id"><generator class="native" /></id><property name="name" /><property name="sn"/><property name="description"/><many-to-one name="parent" column="pid"/><set name="children" inverse="true" lazy="extra"><key column="pid"/><one-to-many class="com.yourcompany.modle.Organization"/></set></class></hibernate-mapping>

解决方案

引用这位兄弟,他的引用都指出来了,这个事物是否关闭有什么关系啊。。。这个引用是CGLib增强后的代理对象,根本就不是原来的对象。当代码调用org.getChildren().size()的时候会判断是否已经加载,如果lazy="false"的话就没问题,load的时候肯定是已经加载了。如果lazy="true"(默认)的话,代理对象发现没有加载过,触发sql语句加载children,但是发现session已经关闭了。哦,我明白了,这个时候因为没有Spring事务的保护,其实已经是Detached的对象了,因为laze="true",所以children是空的。提醒楼主,默认状态下getHibernateTemplate()中的方法都是会自动关闭session的,如果楼主要学习的话,请直接调用session的方法,而不要太依赖getHibernateTemplate(),如果是要正二八经的开发,请使用Spring的事务配置,给这段代码所在的方法加上事务。
解决方案二:
<set name="children" inverse="true" lazy="extra">改成<set name="children" inverse="true" lazy="false">试试因为你没有这个事务管理,而getHibernateTemplate().load方法执行完以后,session就自动关掉了。这位兄弟,他的引用都指出来了,这个事物是否关闭有什么关系啊。。。
解决方案三:
用了spring么?用了的话。你在业务实现类这一级的方法上加事务,在一个事务中,一般配置下,spring会用org.springframework.orm.hibernate3.HibernateTransactionManager,以保证在一个事务中的session一直是开着的。因为你没有这个事务管理,而getHibernateTemplate().load方法执行完以后,session就自动关掉了。

时间: 2024-08-26 00:45:52

hibernate+Spring 无法读取实体对象属性的相关文章

用hibernate连续保存一个实体对象时报错

问题描述 高手们:您们好,请教您们个问题,我在用hibernate连续(一个循环)保存数据,报adifferentobjectwiththesameidentifiervaluewasalreadyassociatedwiththesession我在网上也搜索了解决方法,我也是用了meger,但是不管用,请高手们指点下了哦.org.springframework.orm.hibernate3.HibernateSystemException:adifferentobjectwiththesame

Hibernate如何更新自身的对象属性

问题描述 现在联系使用hibernate,经常遇到的问题是,不如一个emp表的Employee对象,其中有一个属性Department对象关联到dept表,我想更换Employee对象的部门.我通常的做法是JavacodeEmployeeemp=getEmpDAO().findById(id);//获取该员工//dId为要更改的部门编号Departmentdept=getDeptDAO().findById(id);//获取要更改的部门emp.setDepartment(dept);//更新职员

Hibernate实体对象的生命周期(三种状态详解)

Hibernate生命周期会经历三种不同的状态:     1.Transient(瞬态):实体对象在内存是自由存在的,即与数据库中的数据没有任何关系.换句话说就是:该实体从未与任何持久化上下文关联过,它没有持久化标识.例如:          //创建一个Transient对象  User user=new User(); user.setName("username");  user.setPassword("password");  //此时的user为一个Tr

有没有什么配置让hibernate自动持久化某个实体属性,而不级联更新这个属性

问题描述 有没有什么配置让hibernate自动持久化某个实体属性,而不级联更新这个属性 比如说,订单表中有客户资料,客户是界面选择的游离的实体对象,保存订单时应该只更新订单的客户ID,而不级联更新客户信息,目前是不用级联就会报org.hibernate.TransientObjectException: object references an unsaved transient instance.用级联就会修改客户数据,这个是业务不能接受的.目前我通过手工持久化客户对象是可以的,但是每个功能

js解析json读取List中的实体对象示例

 这篇文章主要介绍了js解析json读取List中的实体对象的具体实现,需要的朋友可以参考下 1.由后台action 传给前台是需要将map 转成json格式   代码如下: Map<String, List> resultMap:  JSONObject json = JSONObject.fromObject(resultMap);  message = json.toString();    List中存放多个student对象    2.前台js 中先将结果json串转成对象  复制代

name- 如何将dr[&amp;amp;quot;Name&amp;amp;quot;].toString();赋值给父实体类定义子实体类对象属性

问题描述 如何将dr["Name"].toString();赋值给父实体类定义子实体类对象属性 解决方案 根据一张不知所谓的图片和绕口令一样的问题描述想得到答案,只有靠你自己了. 解决方案二: 我解决了 自己太任性了仔细想想就应该明白的以后要自己多去思考才会得到收获的.@caozhy

使用实体对象做Form属性有什么好处?

问题描述 使用实体对象做Form属性有什么好处? 解决方案 解决方案二:没这样用过.一般是普通属性.估计好处就在不用copyProperties了.但是ActionForm本来就是粗粒度的.你仍个实体对象进去干嘛解决方案三:代码的重用,javabean属性的继承,主要优势是可用于多个ActionForm访问一个属性集.解决方案四:如果对每一个页面提交的属性都要建立一个Form属性,那么编写这些代码是"体力性"的编码工作,最总是人困马乏的,影响代码的整体质量!!所以Struts提供了Dy

我用hibernate自动生成的实体类为什么只有一个属性ID,但是实体类的配置文件里面有属性

问题描述 我用hibernate自动生成的实体类为什么只有一个属性ID,但是实体类的配置文件里面有属性 我用hibernate自动生成的实体类为什么只有一个属性ID,但是实体类的配置文件里面有属性,实体类就一个id 有那位同行大神能解决一下吗 解决方案 http://blog.csdn.net/peterxiaoq/article/details/39892617 解决方案二: 把实体和配置文件来个截图喽,这怎么看

spring注解无法读取配置文件的属性,时间可以读取,求大神帮忙看看

问题描述 spring注解无法读取配置文件的属性,时间可以读取,求大神帮忙看看 //运用注解读取配置文件 @Component @ComponentScan @Configuration @PropertySource({ "classpath:/info.properties" }) public class PropertiesResolve { private static Logger logger = Logger.getLogger(PropertiesResolve.cl