Почему session.save () вызывает запрос на обновление? - PullRequest
0 голосов
/ 09 марта 2012

Это мой код для вставки в две таблицы. Но это дает мне ошибку: «Пакетное обновление вернуло неожиданное количество строк из обновления [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=?

Я хочу, чтобы он снова сделал запрос на вставку при попытке обновления. Пожалуйста, помогите мне, где я не прав.

Ответы [ 3 ]

1 голос
/ 09 марта 2012

Поместите CustomerMeasurementsDTO measurement = new CustomerMeasurementsDTO(); в свой цикл. Это должно создавать новую запись при каждой итерации цикла, а не обновлять ее.

0 голосов
/ 09 марта 2012

Я наконец нашел выход. В моем hibernate.cfg.xml я установил для свойства hbm2ddl.auto значение «create», которое ранее было «update».

Хотя я не очень разбираюсь в вопросах безопасности, но теперь у меня все хорошо.

0 голосов
/ 09 марта 2012

Каждый создаваемый вами объект должен иметь другой идентификатор.С помощью session.flash () вы также можете отображать параметры генерируемого SQL с помощью Как напечатать строку запроса со значениями параметров при использовании Hibernate , чтобы вы могли видеть, какой идентификатор передается

...