我是hibernate的新手,我试图使用以下代码更新映射对象,但它不会更新
factory = config.buildSessionFactory();
session = factory.getCurrentSession();
Transaction t = session.beginTransaction();
String hql = "UPDATE "+tableName+" SET "+columnName+" = '"+columnValue+"' WHERE id ="+id+";";
Query query=session.createSQLQuery(hql);
t.commit();
我错过了什么吗?它不会崩溃也不会更新记录。
注意:我正在使用Hibernate3和Mysql
答案 0 :(得分:9)
你错过了query.executeUpdate()
;
另外,如果您要更新映射对象,我建议您对java对象进行更改,让Hibernate为您进行更新。或至少使用hql查询,而不是本机查询。
确保您的persistence.xml文件将show_sql设置为true并观察日志以查看是否已执行更新。
<property name="hibernate.show_sql" value="true"/>
答案 1 :(得分:3)
您需要使用query.executeUpdate()
来运行查询。
还建议您使用parameters
而不是内联参数。例如。如果columnName = O'Reilly
则整个查询都会出错。
此外,如果它是映射对象,则可以使用HQL而不是SQL查询
相反,您可以使用此
//entity is your hibernate entity obj
String hql = "UPDATE " + entity.getClass().getName + " as entity SET entity." + fieldName + "= :columnValue WHERE entity = :entity";
Query query=session.createQuery(hql).setParameter("columnValue", columnValue).setParameter("entity", entity);
query.executeUpdate();
请注意,您不需要使用单引号。 setParameter
处理它。