0

这是我插入两个表的代码。但它给了我一个错误“批量更新从更新 [0] 返回了意外的行数;实际行数:0;预期:1”

    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=?

我希望它在尝试更新时再次进行插入查询。请帮助我哪里错了。

4

3 回答 3

1

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

于 2012-03-08T20:32:26.950 回答
0

您创建的每个对象都必须具有不同的 ID。使用 session.flash() 您还可以使用如何在使用 Hibernate 时打印带有参数值的查询字符串来显示生成的 SQL 的参数,这样您就可以看到正在传递的 id

于 2012-03-08T23:12:03.880 回答
0

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

虽然我对此的安全问题了解不多,但它现在对我来说很好。

于 2012-03-09T06:46:09.240 回答