如何在ssh框架和activemq下调用dao层的插入方法
我的项目是基于ssh框架开发的,想使用activemq服务器,希望在监听方中的onMessage方法里面,当监听到消息时调用该项目中dao层的add方法进行插入用户信息,...
我的项目是基于ssh框架开发的,想使用activemq服务器,希望在监听方中的onMessage方法里面,当监听到消息时调用该项目中dao层的add方法进行插入用户信息,add方法测试中可以进入,应该是调用成功,但是却无法正常插入数据,数据库表是空的,但也不报错。
如果调用的是dao层的查询方法,是可以进行查询动作的。所以排除了spring未实例化的这个问题。
那么是否还要做什么动作才能够正常调用了??
插入方法是没有问题的,在action层调用可以插入,和字段冲突无关
插入时的方法是使用super.getsession().save()方法插入的,我觉得是和session有关,改为用getHibernateTemplate().save()的方法就可以正常插入
请问具体原因是什么呢?? 展开
如果调用的是dao层的查询方法,是可以进行查询动作的。所以排除了spring未实例化的这个问题。
那么是否还要做什么动作才能够正常调用了??
插入方法是没有问题的,在action层调用可以插入,和字段冲突无关
插入时的方法是使用super.getsession().save()方法插入的,我觉得是和session有关,改为用getHibernateTemplate().save()的方法就可以正常插入
请问具体原因是什么呢?? 展开
2个回答
展开全部
根据你的描述,大概明白你的意思了,弱弱的问一下你的add真的插入成功了吗?我觉得你再试一试,因为你所用的getSession()方法只是得到hibernate的session,而session本身没有transaction不能插入,这是Hibernate中明确的,查看HibernateSupportDao的API可以发现
Obtain a Hibernate Session, either from the current transaction or a new one. The latter is only allowed if the "allowCreate" setting of this bean's HibernateTemplate is "true".
意思是,不论从当前的Transaction还是新的Transaction,spring只返回一个session,你用的ssh,单独用过hibernate和spring吗?hibernate中session.save(OBJ)还需要提供一个transaction.commit()的方法,而session中createQuery方法在不提供transaction的时候只能进行查询,不能进行修改,插入和删除。
而HibernateTemplate不一样,HibernateTemplate出现在spring中,spring将HibernateTemplate封装为HibernateSupportDao实例,所以这个HibernateTemplate包括一切Hibernate,而不仅仅只是Session。
关于BaiduHi的补充
在session.save()时,hibernate会认为这是一个事务(transaction),如果之前没有事务,这个save是不可能成功的,必须通过session.beginTransaction()创建一个事务,因为没有事务意味着不能进行操作,可能由于你测试时其他原因,有了相应的事务,所以不需要再提供事务。(个人猜想)
请参照Hibernate API
Obtain a Hibernate Session, either from the current transaction or a new one. The latter is only allowed if the "allowCreate" setting of this bean's HibernateTemplate is "true".
意思是,不论从当前的Transaction还是新的Transaction,spring只返回一个session,你用的ssh,单独用过hibernate和spring吗?hibernate中session.save(OBJ)还需要提供一个transaction.commit()的方法,而session中createQuery方法在不提供transaction的时候只能进行查询,不能进行修改,插入和删除。
而HibernateTemplate不一样,HibernateTemplate出现在spring中,spring将HibernateTemplate封装为HibernateSupportDao实例,所以这个HibernateTemplate包括一切Hibernate,而不仅仅只是Session。
关于BaiduHi的补充
在session.save()时,hibernate会认为这是一个事务(transaction),如果之前没有事务,这个save是不可能成功的,必须通过session.beginTransaction()创建一个事务,因为没有事务意味着不能进行操作,可能由于你测试时其他原因,有了相应的事务,所以不需要再提供事务。(个人猜想)
请参照Hibernate API
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询