2012-03-08 75 views
0

这是我的代码插入到两个表中。但它给了我一个错误“批量更新返回意外的行数从更新[0];实际行数:0;预期:1”为什么session.save()引发更新查询?

Session session = sessionFactory.getCurrentSession(); 
    ProfileDTO profile = new ProfileDTO(); 
    profile.setCustomerID(1); 
    profile.setProfileName(profileName); 
    profile.setProfileType(profileType); 
    profile.setRecordId(9); 
    session.save(profile); 

    int profileID = profile.getRecordId(); 
    CustomerMeasurementsDTO measurement = new CustomerMeasurementsDTO(); 
    String ids[] = profileidsString.split(","); 
    String vals[] = profilevalsString.split(","); 
    for (int i = 0; i < ids.length ; i++){ 
     measurement.setMeasurementId(ids[i]); 
     measurement.setMeasurementValue(vals[i]); 
     measurement.setCustMeasurementsProfileId(profileID); 
     session.save(measurement); 
    }; 

在执行时,它给出了这样的记录目的。

Hibernate: 
    /* insert com.domain.CustomerMeasurementsDTO 
     */ insert 
     into 
      cust_measurements 
      (cust_measurements_record_id, last_modified, measurement_id, measurement_value, measurement_record_id) 
     values 
      (?, ?, ?, ?, ?) 
Hibernate: 
    /* update 
     com.domain.CustomerMeasurementsDTO */ update 
      cust_measurements 
     set 
      cust_measurements_record_id=?, 
      last_modified=?, 
      measurement_id=?, 
      measurement_value=? 
     where 
      measurement_record_id=? 

我希望它再次进行插入查询,而它试图更新。请帮我,我错了。

回答

1

把你的CustomerMeasurementsDTO measurement = new CustomerMeasurementsDTO();放到你的循环中。这应该在每个循环迭代中创建一个新记录,而不是更新它。

+0

我试过,但现在它给了我 “一个具有相同标识符值的不同对象已经与会话相关联” 我真的不明白这些错误的含义是什么。请你能解释我。 – 2012-03-08 21:38:48

0

我终于找到了一条出路。在我的hibernate.cfg.xml中,我将“hbm2ddl.auto”的属性值设置为“create”,这是之前的“更新”。

虽然我对这个安全问题不太了解,但现在对我来说很好。

相关问题