Hibernate 及联更新失效 在父类和子类的关系里指定 cascade="all" 其他可选值,例如save-update save-delete 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 是不是parent的状态已经不是persistent了? 楼上的说得对,我折腾了一上午发现我update时的parent已经不是我刚才从数据库中取道的那一个了,虽然业务号没变,原因是不是不是一个session造成的呢?我猜测是这样。我用的spring+Hibernate,SessionFactory是这样配置的<bean id="mySessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean"> <property name="dataSource"><ref local="dataSource"/></property> ...我该怎么办呢? idilent(怎么理解怎么说) ( ) 信誉:99 2006-03-29 11:36:00 得分: 0 是不是parent的状态已经不是persistent了? ---------------------应该就是这方面的问题。看被操作的对象,的状态,??? hibernate对象生命周期内的三种状态1. transient(自由状态) 自由状态就是java对象创建出来,在内存中自由存在,与数据记录无关2. Persistent(持久状态) 持久状态就是处于hibernate框架所管理的状态。这种状态下,实体对象的引用被hibernate容器加以管理。3. Detached(游离状态) 游离状态就是在java对象所对应的session实例关闭后所处的状态处于自由状态的对象,可以通过Session.save()转换为持久状态,同样,一个对象由Session.load()加载,也处于持久状态Session可以看作是持久状态对象的宿主。如果Session失效,则对象就变为游离状态Session.delete()可以使处于持久状态的对象变为自由状态自由状态与游离状态区别处于游离状态的对象可以再次同Session关联变为持久状态OrderItem oi = new OrderItem();oi.setItemNum(1);oi.setOrderDetail( "TV set" );oi.setOrderSeri( "12345" );Session session = sessionFactory.openSession();Transaction tx = session.beginTransaction();session.save(oi);tx.commit();session.close();此时,oi处于游离状态在另外一段代码中出现Session session2 = sessionFactory.openSession();Transaction tx2 = session.beginTransaction();session2.update(oi);oi.setOrderDetail( "television" );tx2.commit();session2.close();此时,当session2.update(oi)执行后,再执行oi.setOrderDetail(),可以发现数据库中的数据已经改变了,而我们并没有显示的将oi变为持久状态自由状态与数据库记录无关,我们不能通过处于自由状态的对象来搜索数据库。而处于游离状态的对象虽然与Session脱离,但是我们可以通过它来寻找数据库中相应的记录转自:http://blog.csdn.net/thunderzhulei/archive/2005/05/20/376720.aspx struts2的标签问题 很多标签没有 spring问题 使用lucene时报的错,望高手指教 使用getHibernateTemplate().find返回值始终是null 怎样用Eclipse3.1 + weblogic开发Ejb?郁闷好多天了 tomcat下的编译错误,答出散分!! java中怎样实现柱状图 面试题目一题 name is too long to represent java压缩png质量 急求jsp页面中解决用户输入全角与半角的问题 jsp问题。请大哥进来看看 在线等
我用的spring+Hibernate,SessionFactory是这样配置的
<bean id="mySessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
<property name="dataSource"><ref local="dataSource"/></property>
...我该怎么办呢?
是不是parent的状态已经不是persistent了?
---------------------
应该就是这方面的问题。看被操作的对象,的状态,???
1. transient(自由状态)
自由状态就是java对象创建出来,在内存中自由存在,与数据记录无关
2. Persistent(持久状态)
持久状态就是处于hibernate框架所管理的状态。这种状态下,实体对象的引用被hibernate容器加以管理。
3. Detached(游离状态)
游离状态就是在java对象所对应的session实例关闭后所处的状态处于自由状态的对象,可以通过Session.save()转换为持久状态,同样,一个对象由Session.load()加载,也处于持久状态Session可以看作是持久状态对象的宿主。如果Session失效,则对象就变为游离状态Session.delete()可以使处于持久状态的对象变为自由状态自由状态与游离状态区别
处于游离状态的对象可以再次同Session关联变为持久状态
OrderItem oi = new OrderItem();
oi.setItemNum(1);
oi.setOrderDetail( "TV set" );
oi.setOrderSeri( "12345" );Session session = sessionFactory.openSession();
Transaction tx = session.beginTransaction();
session.save(oi);
tx.commit();
session.close();
此时,oi处于游离状态在另外一段代码中出现
Session session2 = sessionFactory.openSession();
Transaction tx2 = session.beginTransaction();
session2.update(oi);
oi.setOrderDetail( "television" );
tx2.commit();
session2.close();此时,当session2.update(oi)执行后,再执行oi.setOrderDetail(),可以发现数据库中的数据已经改变了,而我们并没有显示的将oi变为持久状态自由状态与数据库记录无关,我们不能通过处于自由状态的对象来搜索数据库。而处于游离状态的对象虽然与Session脱离,但是我们可以通过它来寻找数据库中相应的记录
转自:
http://blog.csdn.net/thunderzhulei/archive/2005/05/20/376720.aspx