0

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

4

2 回答 2

9

你不见了query.executeUpdate()

此外,如果您要更新映射对象,我建议您对 java 对象进行更改,并让 Hibernate 为您进行更新。或者至少使用 hql 查询,而不是本地查询。

确保您的 persistence.xml 文件将 show_sql 设置为 true 并查看日志以查看更新是否已执行。

<property name="hibernate.show_sql" value="true"/>
于 2012-05-25T17:48:09.320 回答
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处理它。

于 2012-05-25T20:24:39.773 回答