2012-03-08 88 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」,這是之前的「更新」。

雖然我對這個安全問題不太瞭解,但現在對我來說很好。

相關問題