//解析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 表  为双向一对多的关系。。我也贴出来,哪位高手帮忙看看。
哪位大侠一救  感激不尽。。

解决方案 »

  1.   

    datil.setUsers(users);
    这里的users应该是从数据库里面查询出来的持久态对象。users的uid要确保有值
      

  2.   

    谢谢,users 从session中拿出来的,传到这个类中的这个不行吗???   users 是当前登录对象,肯定是有值得
      

  3.   


    谢谢,users 从session中拿出来的,传到这个类中的这个不行吗???   users 是当前登录对象,肯定是有值得
      

  4.   

    你这个是一列一列的添加值  还是说 一下全部添加进去?
    native  是看你对应的是什么数据库 应该与这个没关系吧
      

  5.   


    谢谢,users 从session中拿出来的,传到这个类中的这个不行吗???   users 是当前登录对象,肯定是有值得--------------------------
    这里的session指的是作用域吧,应该是登录时放进去的对象,这种情况下users不是持久台。建议根据id重新将users查询出来,然后再操作。
    在实际的开发过程使用hibernate,通常不会去设置这种一对多的映射,原因如下:
    1. 难以掌握,很多开发者不知道怎么正确使用,容易埋下安全隐患。
    2. 使用的好,性能还行,如果cascade、缓存等设置的不好,容易引起性能问题。
    因此开发中倾向不去配置一对多、多对多的映射关系。
    通常hibernate适用于单表的增删改查操作。
    查询中,如果有表关联,一般限于2张表。超过两张的最好手写sql语句或者存储过程。
    如果是关联更新,最好拆分成单个表的更新,不要使用hibernate。这些都是实用经验。如果是钻研技术细节,想探知究竟内部如何处理的,有哪些潜规则,那么还是去看相关的文档或者源代码吧。希望对你有帮助
      

  6.   


    谢谢,users 从session中拿出来的,传到这个类中的这个不行吗???   users 是当前登录对象,肯定是有值得--------------------------
    这里的session指的是作用域吧,应该是登录时放进去的对象,这种情况下users不是持久台。建议根据id重新将users查询出来,然后再操作。
    在实际的开发过程使用hibernate,通常不会去设置这种一对多的映射,原因如下:
    1. 难以掌握,很多开发者不知道怎么正确使用,容易埋下安全隐患。
    2. 使用的好,性能还行,如果cascade、缓存等设置的不好,容易引起性能问题。
    因此开发中倾向不去配置一对多、多对多的映射关系。
    通常hibernate适用于单表的增删改查操作。
    查询中,如果有表关联,一般限于2张表。超过两张的最好手写sql语句或者存储过程。
    如果是关联更新,最好拆分成单个表的更新,不要使用hibernate。这些都是实用经验。如果是钻研技术细节,想探知究竟内部如何处理的,有哪些潜规则,那么还是去看相关的文档或者源代码吧。希望对你有帮助
    谢谢,应该是这个问题,users对象从新取了一下,后面又改了下数据库的字段属性,反正这会不报错了。。谢谢