Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/fortran/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Hibernate 记录尚未保存,但数据库中自动递增的id已递增_Hibernate - Fatal编程技术网

Hibernate 记录尚未保存,但数据库中自动递增的id已递增

Hibernate 记录尚未保存,但数据库中自动递增的id已递增,hibernate,Hibernate,我有两个表来存储答案和表单的HTML模板。表answers具有外键,外键指html_模板表中的主键。当我尝试向应答表添加记录时出现问题 //session opened Answers answers = new Answers(); answers.setAnswer("answer..."); //there is a record in getHtmlTemplates with 4 as an id answers.setHtmlTemplates(get

我有两个表来存储答案和表单的HTML模板。表answers具有外键,外键指html_模板表中的主键。当我尝试向应答表添加记录时出现问题

//session opened
    Answers answers = new Answers();
    answers.setAnswer("answer...");
    //there is a record in getHtmlTemplates with 4 as an id
    answers.setHtmlTemplates(getHtmlTemplates(4));
    session.save(answers);

程序执行时没有任何警告,但在DB(MySql)中没有记录。当我手动将记录添加到
答案
时,id会增加一个以上。实际上,当所有操作都在事务中时,会添加一条记录。怎么搞的?DB数据库似乎已删除此记录

您可能没有提交事务。对于MySQL使用的自动递增列,
save
方法会插入一个伪记录,以便Hibernate可以检索新的ID值(注意,
save
返回一个对象,即新ID)。MySQL现在已经将该值标记为正在使用,这就是为什么当您手动插入时,ID看起来像是“跳转”了。

很可能您没有提交事务。对于MySQL使用的自动递增列,
save
方法会插入一个伪记录,以便Hibernate可以检索新的ID值(注意,
save
返回一个对象,即新ID)。MySQL现在已经将该值标记为正在使用,这就是为什么当您手动插入时,ID看起来像“跳转”了。

您可能是对的。但我在考虑我甚至没有开始任何交易的情况。我只打开了一个会话并在会话中保存了一个新对象,然后调用了session.flush()。没用。正如我在使用transaction时所说的,所有事务都有效,但我需要启动事务吗?它以这种方式处理没有外键的表,因此当可能有多个SQL查询执行(从数据库中检索对象的主键)时,必须启动(并提交)事务?Hibernate在事务中执行所有操作。在上面的示例中,事务是隐式启动的,但您从未提交它,因此没有数据。您可能是对的。但我在考虑我甚至没有开始任何交易的情况。我只打开了一个会话并在会话中保存了一个新对象,然后调用了session.flush()。没用。正如我在使用transaction时所说的,所有事务都有效,但我需要启动事务吗?它以这种方式处理没有外键的表,因此当可能有多个SQL查询执行(从数据库中检索对象的主键)时,必须启动(并提交)事务?Hibernate在事务中执行所有操作。在上面的示例中,事务是隐式启动的,但您从不提交它,因此没有数据。