hibernate hbm:发现自动(不需要的)更新
hibernate hbm: automatic (unwanted) update found
在我的项目中,我使用 hibernate hbm
和 spring
,我 运行 一个 sql
查询来更新单个列,
Query sql = getSession().createSQLQuery("update HISTORIQUE_DETAIL_APPELS set token_otp = '"+historiqueDetailAppelsVO.getCodeOtp()+"' where id = '"+historiqueDetailAppelsVO.getId()+"'");
try {
sql.executeUpdate();
} catch (Exception e) {
e.printStackTrace();
}
我发现执行了另一个查询并更新了数据库中的table,
Hibernate: update HISTORIQUE_DETAIL_APPELS set token_otp = '14d3fc' where id = '150017'
Hibernate: update HISTORIQUE_DETAIL_APPELS set cod_cent=?, adresse_ip=?, id_conseiller=?, type_piece=?, num_piece_ident=?, msisdn=?, mois1_detail=?, mois2_detail=?, mois3_detail=?, date_demande=?, no_ticket_caisse=?, date_ticket=?, cod_user=?, dat_maj=?, flag_imp_data=?, date_imp_data=?, token_otp=?, send_mail=?, client_mail=?, date_debut=?, date_fin=? where id=?
二次更新的源头在哪里?
我以前遇到过同样的问题,经过一番研究我发现:
当用户使用基于直接查询的操作更新任何记录时,它会直接更新到数据库中。
但是,如果相同的记录(以前的副本)已经存在于当前会话中(即用户先前在当前会话中读取过),则数据库记录(通过基于查询的操作更新)和当前会话记录之间会发生差异,因此,hibernate 在会话刷新或事务完成期间再次运行更新查询以更新会话记录。
为了避免 hibernate 在刷新会话期间或事务完成时执行第二次执行。
希望对你有所帮助
谢谢
我通过在 hbm.xml
文件
中添加 dynamic-update="true"
来解决这个问题
我找到了解决方案 here:
"The dynamic-update attribute tells Hibernate whether to include
unmodified properties in the SQL UPDATE statement."
在我的项目中,我使用 hibernate hbm
和 spring
,我 运行 一个 sql
查询来更新单个列,
Query sql = getSession().createSQLQuery("update HISTORIQUE_DETAIL_APPELS set token_otp = '"+historiqueDetailAppelsVO.getCodeOtp()+"' where id = '"+historiqueDetailAppelsVO.getId()+"'");
try {
sql.executeUpdate();
} catch (Exception e) {
e.printStackTrace();
}
我发现执行了另一个查询并更新了数据库中的table,
Hibernate: update HISTORIQUE_DETAIL_APPELS set token_otp = '14d3fc' where id = '150017'
Hibernate: update HISTORIQUE_DETAIL_APPELS set cod_cent=?, adresse_ip=?, id_conseiller=?, type_piece=?, num_piece_ident=?, msisdn=?, mois1_detail=?, mois2_detail=?, mois3_detail=?, date_demande=?, no_ticket_caisse=?, date_ticket=?, cod_user=?, dat_maj=?, flag_imp_data=?, date_imp_data=?, token_otp=?, send_mail=?, client_mail=?, date_debut=?, date_fin=? where id=?
二次更新的源头在哪里?
我以前遇到过同样的问题,经过一番研究我发现:
当用户使用基于直接查询的操作更新任何记录时,它会直接更新到数据库中。 但是,如果相同的记录(以前的副本)已经存在于当前会话中(即用户先前在当前会话中读取过),则数据库记录(通过基于查询的操作更新)和当前会话记录之间会发生差异,因此,hibernate 在会话刷新或事务完成期间再次运行更新查询以更新会话记录。
为了避免 hibernate 在刷新会话期间或事务完成时执行第二次执行。
希望对你有所帮助
谢谢
我通过在 hbm.xml
文件
dynamic-update="true"
来解决这个问题
我找到了解决方案 here:
"The dynamic-update attribute tells Hibernate whether to include unmodified properties in the SQL UPDATE statement."