Hibernate更新无法正常工作

时间:2012-05-25 17:46:14

标签: java mysql hibernate

我是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

2 个答案:

答案 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处理它。