//解析excel 文件
......for (int i = 1; i < sheet.getRows(); i++) {
// 创建一个数组 用来存储每一列的值
String[] str = new String[sheet.getColumns()]; // 列数
for (int j = 0; j < sheet.getColumns(); j++) {
// 获取第i行,第j列的值
cell = sheet.getCell(j, i);
str[j] = cell.getContents();
} if(str.length>0){
Datil datil = new Datil();
datil.setDatetail(str[0]);
datil.setTalktime(str[1]);
datil.setGrade(str[2]);
datil.setZname(str[3]);
datil.setTelephoneid(str[4]);
datil.setTname(str[5]);
datil.setSex(str[6]);
datil.setAge(str[7]);
datil.setRecord(str[8]);
datil.setWorkstate(str[9]);
datil.setZone(str[10]);
datil.setCoursecategories(str[11]);
datil.setQqnumber(str[12]);
datil.setBackresult(str[13]);
datil.setTimeagain(str[14]);
datil.setNote(str[15]);
datil.setCreateperson(str[16]);
datil.setResource(str[17]);
datil.setKeyword(str[18]);
datil.setAccesspath(str[19]);
datil.setTalkingpage(str[20]);
datil.setConcerns1(str[21]);
datil.setConcerns2(str[22]);
datil.setConcerns3(str[23]);
datil.setUsers(users); // 这个地方测试 数据时成功拿到的
System.out.println(datil);
try {
this.getHibernateTemplate().save(datil);
flg = 1;
} catch (DataAccessException e) {
e.printStackTrace();
}
}
}就是save方法报错,
org.hibernate.AssertionFailure: null id in com.lzbdqn.missaiti.entity.Datil entry (don't flush the Session after an exception occurs)...项目SSH框架搭建,datil 表主键是自增,里面有个用户表users的外键uid,配置文件检查了下,感觉也没有什么问题。 写了个测试类,可以成功加入数据。但是这个地方就是加不进去。
hibernate 配置文件中,users 表 和datil 表 为双向一对多的关系。。我也贴出来,哪位高手帮忙看看。
哪位大侠一救 感激不尽。。
这里的users应该是从数据库里面查询出来的持久态对象。users的uid要确保有值
谢谢,users 从session中拿出来的,传到这个类中的这个不行吗??? users 是当前登录对象,肯定是有值得
native 是看你对应的是什么数据库 应该与这个没关系吧
谢谢,users 从session中拿出来的,传到这个类中的这个不行吗??? users 是当前登录对象,肯定是有值得--------------------------
这里的session指的是作用域吧,应该是登录时放进去的对象,这种情况下users不是持久台。建议根据id重新将users查询出来,然后再操作。
在实际的开发过程使用hibernate,通常不会去设置这种一对多的映射,原因如下:
1. 难以掌握,很多开发者不知道怎么正确使用,容易埋下安全隐患。
2. 使用的好,性能还行,如果cascade、缓存等设置的不好,容易引起性能问题。
因此开发中倾向不去配置一对多、多对多的映射关系。
通常hibernate适用于单表的增删改查操作。
查询中,如果有表关联,一般限于2张表。超过两张的最好手写sql语句或者存储过程。
如果是关联更新,最好拆分成单个表的更新,不要使用hibernate。这些都是实用经验。如果是钻研技术细节,想探知究竟内部如何处理的,有哪些潜规则,那么还是去看相关的文档或者源代码吧。希望对你有帮助
谢谢,users 从session中拿出来的,传到这个类中的这个不行吗??? users 是当前登录对象,肯定是有值得--------------------------
这里的session指的是作用域吧,应该是登录时放进去的对象,这种情况下users不是持久台。建议根据id重新将users查询出来,然后再操作。
在实际的开发过程使用hibernate,通常不会去设置这种一对多的映射,原因如下:
1. 难以掌握,很多开发者不知道怎么正确使用,容易埋下安全隐患。
2. 使用的好,性能还行,如果cascade、缓存等设置的不好,容易引起性能问题。
因此开发中倾向不去配置一对多、多对多的映射关系。
通常hibernate适用于单表的增删改查操作。
查询中,如果有表关联,一般限于2张表。超过两张的最好手写sql语句或者存储过程。
如果是关联更新,最好拆分成单个表的更新,不要使用hibernate。这些都是实用经验。如果是钻研技术细节,想探知究竟内部如何处理的,有哪些潜规则,那么还是去看相关的文档或者源代码吧。希望对你有帮助
谢谢,应该是这个问题,users对象从新取了一下,后面又改了下数据库的字段属性,反正这会不报错了。。谢谢