这是我插入两个表的代码。但它给我一个错误“批量更新从更新[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=?
我希望它在尝试更新时再次进行插入查询。我帮我错了。
答案 0 :(得分:1)
将CustomerMeasurementsDTO measurement = new CustomerMeasurementsDTO();
放入循环中。这应该在每次循环迭代时创建一个新记录,而不是更新它。
答案 1 :(得分:0)
您创建的每个对象都必须具有不同的ID。使用session.flash()你也可以使用How to print a query string with parameter values when using Hibernate显示生成SQL的参数,这样你就可以看到传递了哪个id
答案 2 :(得分:0)
我终于找到了出路。在我的hibernate.cfg.xml中,我将“hbm2ddl.auto”的属性值设置为'create',之前是'update'。
虽然我对这方面的安全问题了解不多,但它对我来说现在很好。