我们遇到了一个非常奇怪的hsqldb问题。我们正在运行一些在MySQL上运行得很好的测试,但最近我们已经切换到hsqldb进行单元测试。在这样做的时候,我们注意到我们的一些测试开始失败。其中一个测试插入三个记录A、B和C,并尝试检索前两个记录A和B。然而,当我们第一次在新配置的(空)数据库上运行测试时,只返回B。然而,如果我们在同一数据库上重复测试,则同时返回A‘和B’(在您询问之前,是的,A、B和C与A‘、B’和C‘不同)。
我们尝试强制数据库保留记录,并插入了延迟。除了通过一次插入“预热数据库”之外,似乎没有什么帮助。如果我们事后检查hsqldb日志,它们包含所有insert语句,甚至是那些我们在第一次运行数据库时无法使用SELECT检索到的语句。
有没有人遇到过hsqldb需要用虚拟insert语句“预热”的问题?如果我们在运行测试之前使用垃圾执行一条insert语句,那么测试也会成功完成。
我们已经在hsqldb 2.0.0和2.1.0上进行了测试。两个版本产生相同的结果。
发布于 2011-03-28 17:28:27
我从来没有用过SELECT ..,但是你有没有尝试过hsqldb然后再运行hsqldb?
数据库操作(INSERT、UPDATE或DELETE)延迟并不是不合理的。当数据库负载不是很重的时候,它可能不应该发生,但是你不能指望它。
发布于 2011-03-29 18:48:55
OP在其中一条评论中给出了真正的答案。HSQLDB不会忽略第一次插入。默认情况下,HSQLDB和MySQL为表中标识列生成的第一个自动增量值分别使用0和1。OP的查询假设第一个值是MySQL值(1)。
使用HSQLDB,可以使用GENERATED BY DEFAULT AS IDENTITY START WITH 1来定义与MySQL缺省值相匹配的自动增量列。
https://stackoverflow.com/questions/5456742
复制相似问题