无法使用sql表单插入数据spring hibernate with createSQLQuery(sql).executeUpdate()

时间:2016-06-30 08:23:44

标签: java mysql spring hibernate

我在一个spring项目中工作,我使用hibernate 3.5.5-Final,我的数据库是MySQL。我的代码如下:

    String sql = "INSERT INTO recently_sold_products (product_id, sell_time) VALUES ('9749', '2016-06-01 00:00:00')";
    Query query = getCurrentSession().createSQLQuery(sql);
    System.out.println("Updating recently sold products. Row = " + query.executeUpdate());

这给我输出像

更新最近售出的产品。行= 1

但是当我检查数据库表时,我发现没有行。

在此表中,product_id是主键。如果我尝试插入重复的product_id,那么我找到错误消息,重复条目'9749'用于密钥'PRIMARY',它确认查询到达数据库。但是如果我尝试插入一个普通行,那么executeUpdate()方法的输出是1,但表中没有行插入。

我无法理解发生了什么。

3 个答案:

答案 0 :(得分:1)

一切似乎都很好,但问题是回滚。 executeUpdate;之后 加上这个:

connection.commit(); //Whatever you are using as con. string.

答案 1 :(得分:0)

尝试在Insert-statement

之后发送提交

答案 2 :(得分:0)

从我对Hibernate的了解很少,您似乎应该更仔细地控制会话和事务。

某些库或数据库配置允许您在会话中运行多个查询,而无需提交数据并允许将来的会话查看所做的更改。发生的事情是您在会话中更改数据但随后结束会话并回滚数据,以便其他会话无法看到它(它没有发生)。

打开会话,启动事务(或查询),提交会话,关闭会话。

这是您要做的事情的顺序。如果您没有创建会话并将其存储为变量,那么您可以在查询后使用getCurrentSession()。getTransaction()。commit()并且这应该工作,但是您不能很好地控制会话这样做,如果幕后的某些事情没有以正确的顺序发生,可能会出现奇怪的错误。