最近用 ssh 框架 写的 java 代码。
中有一个保存方法,需要先去不同的表中得到数据 去对比之后 ,正确 再保存。
在一个 service 方法中。spring事务配置中 是 一个 service 一个事务。
调用了 截个 dao。然后取数据,后面验证通过之后 保存。
一直报错: no key for value 。。。
找了很多资料,分析自己的代码好久 ,最好 得到一个结论,网上也有,但是当时没有看懂,自己代码里面 存在 hibernate 的 session 去取数据,保存也是用 的 hibernate的,但是有一个dao取数据 用的 jdbc 方法:
『一个取数据很方便的 方法:但是现在知道这种写法不是 hibernate,而是jdbc支持的。
Session session = this.getHibernateTemplate().getSessionFactory().openSession();
Query query = session.createSQLQuery(sql).setResultTransformer(Transformers.aliasToBean(ExportPointDto.class));
@SuppressWarnings("unchecked")
List<ExportPointDto> list = query.list();
session.close();
if (!list.isEmpty()) {
return list;
}
return null;
将一个sql查到的语句用java对象封装,注意的是 对象里面的字段和 sql 中的 字段名(别名)一致
』
,然后 引起了冲突,(用hibernate的时候一会用datasource的事物(transaction)一会用hibernate的事务 [网上百度的 ])。
所以在 一个 service (一个事务中) 只用一种,那样才能让jvm 识别吧。