解决方案 »
- 分享到QQ空间的问题,急.............................
- com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException:
- 关于dojo与后台的数据传输及页面跳转
- 大家用什么开发jsp web报表???
- 在使用struts2 的<sx:a>标签是 页面的内容重复两次
- 谁知道哪里有免费的jsp个人主页空间申请呀
- 如何在WebLogic中使用通配符加载struts2、spring、hibernate配置文件。
- Action中取出的ActionForm中的值都为Null只有一个属性取到值,这是为何
- 很菜的一个问题,关于环境的配置
- 关于servlet的服务器配置
- sql向mysql数据库迁移,分页出现问题,报的应该是 关键字错误,但是死活发现不了
- 问个基础的Struts2问题。谢谢先!
直接用getHibernateTemplate().find(String query,Object... values)
这个
HibernateTemplate执行execute(new HibernateCallback())方法,从HibernateCallback中得到session,在此session中做多个操作,并希望这些操作位于同一个事务中。
回调实际就是一种事件触发模式,就象连环地雷一样,一旦触发一个,这个再触发另外一个,你在find这个方法被执行时,希望同时执行其他方法,就需要回调。
楼主不需要执行多个方法就不用加这个回调的东西了吧!
String queryString="from ZqAdminPermission zap left join fetch zap.zqAdminModuleses where zap.adminPermissionId=?";
List list = getHibernateTemplate().find(queryString,id);
if(list.size()==0) return null;
return (ZqAdminPermission)list.get(0);
}依然是查询数据时就把数据删了。。
1. 检查一下你的连接是不是走的删除的方法。
2. debug一下你这个action的处理的地方。
一直是跟断点走的,走一步看一下数据库,就在find()方法执行完查询后,数据被删除的
public ZqAdminPermission findById(String id) {
try {
String hql = "from ZqAdminPermission zap where zap.adminPermissionId='"+id+"'";
logger.debug("hql:"+hql);
List<ZqAdminPermission> list=this.getHibernateTemplate().find(hql);
if(list.size()>0){
return list.get(0);
}
} catch (Exception e) {
throw new DataException(e.toString(), null);
}
return null;
}
不要看数据库,看看你每行走的代码,就是跳转到实现类里面每一步也看一下。尤其是你查询中的每一行和你执行完后的操作。
最好贴一下你action处理的方法!
public void findById(){
ZqAdminPermission zqAdminPermission=zqAdminPermissionService.findById(adminPermissionId);
ServletActionContext.getRequest().setAttribute("permission", zqAdminPermission);
}action是这样的,很简单的,跳转到Service里面直接到DAO查的数据,中间没做任何处理步骤
我想的是:你走的是查询方法,跟删除根本没关系的吧,但是执行查询竟然将数据删除,这个是很神奇的事情啊!我想的是你走的链接是删除的方法或者是你调用方法的过程中调用成删除的了。映射这个东西是帮你获取数据的跟删除没什么关系的。
还有一点:从你的sql语句来看用不到多对多什么的啊,最多是一对多的关系。
多对多的话,你中间表里面分别是另外两张关联表的主键,是不是总共这两个字段?如果是的话作为这张表的复合主键和复合外键,这个时候的这个关联表是不生成hibernate映射文件的。 你是不是还有这个关联表的映射文件呢?
楼主,把hibernate的配置信息发上来。
hibernate.cfg.xml
其中有项:<!--自动根据hbm生成ddl。-->
<property name="hibernate.hbm2ddl.auto">update</property>你可能设置成:
<property name="hibernate.hbm2ddl.auto">delete</property>
也可能是设置在spring里面了。请楼主找出来然后把hibernate的配置信息贴出来。
不是程序的问题。估计是hibernate设置出问题了。
<property name="hibernate.hbm2ddl.auto">delete</property>
那么直接删除就行。hbm2ddl.auto这个设置不要没关系的。