|
0
|
| Ranjithkumar · 技术社区 · 3 年前 |
|
1
3
尽管我认为问题评论已经提供了理解问题所需的所有信息,但请允许我尝试解释一些事情,并尝试纠正一些不准确的地方。
根据您的源代码,您正在使用
您使用的是Oracle数据库,这是一个与问题非常相关的信息。
支持
不管怎样,
默认情况下,Oracle中的序列的缓存大小为
这个默认的缓存大小就是为什么您在
这种行为并不是Hibernate独有的:请使用任何合适的工具发出一个简单的JDBC插入语句或SQL命令,您就会进行同样的实验。
要解决此问题,请创建表格,指示
注意您需要使用
也许您可以在不重新创建整个表的情况下修改列:
说了这么多,请注意,事实上 cache mechanism 是一种优化,而不是缺点:最终,这只是我的观点,这些ID只是非自然分配的ID,在一般用例中,缓存的好处大于缺点。
请考虑阅读
this great article
关于
提供的答案与
|
|
2
2
它与Hibernate用于递增序列值的Hi/Lo算法有关。阅读此示例中的更多信息: https://www.baeldung.com/hi-lo-algorithm-hibernate 。
这是Hibernate使用的优化,它将DB序列中的一些值消耗到池(Java运行时)中,并在执行适当的值时使用它们
示例给出了上层抽象中正在发生的事情的概念。 (内部实现更复杂,但在这里我们不在乎) 场景: 用户在一段时间内插入21个
示例1(当前行为
示例2(当前行为
示例#1
:对数据库的调用总数为
23
在这种情况下,在数据库中手动声明序列将没有帮助,因为,例如在以下语句中\
我们只控制DB内部运行时中使用的“缓存”,这对Hibernate来说是不可见的。当DB停止并再次启动时,它会影响序列间隙,但事实并非如此。 当Hibernate使用序列中的值时,这意味着序列的状态在DB端发生了更改。我们可以将其视为酒店房间预订:一家公司(Hibernate)为一家酒店(DB)的会议预订了20个房间,但只有2名与会者到达。然后18间客房将空置,其他客人无法使用。在这种情况下,“预订期”是永远的。 关于如何配置Hibernate使用序列的更多详细信息,请点击此处: https://ntsim.uk/posts/how-to-use-hibernate-identifier-sequence-generators-properly 以下是旧版本Hibernate的简短答案。尽管如此,它还是有相关的想法: https://stackoverflow.com/a/5346701/2774914 |
|
|
user29759326 · 如何返回递归函数中的最后一个值? 1 年前 |
|
|
malife89 · 将java中的字符串读取为正确的日期格式 1 年前 |
|
|
Tim · 在java中,有没有更快的方法将字节数组写入文件? 1 年前 |
|
|
rudraraj · java中未声明最终变量 1 年前 |
|
|
Bala Ji · 以下BFS的实施效率如何? 1 年前 |