当前位置: 首页 > 面试题库 >

休眠模式应该为每个表使用唯一序列吗?

简景焕
2023-03-14
问题内容

我有几个实体AUTOHibernate和中使用密钥生成策略postgres

@Id
@GeneratedValue(strategy=GenerationType.AUTO)
private Long id;

这将导致hibernate_sequence生成一个,并且每个实体在分配键时都将使用该序列。

现在,我有一个包含大量缓存数据(如100k条目)的表和一些用户表。由于两者都使用策略AUTO,因此它们都从相同的hibernate序列中获取密钥。结果,即使我只有10个用户,他们的ID也会全部由6到7位数字组成,例如123123

我不知道一般而言是否应该为每个表引入自定义序列?还是我不应该那么在乎id的生成?


问题答案:

我最近为我的项目解决了这个问题。我使用增强型序列生成器(这是序列样式生成器的默认值),并将prefer_sequence_per_entity参数设置为true

我的内容package-info.java

@GenericGenerator(
    name = "optimized-sequence",
    strategy = "enhanced-sequence",
    parameters = {
        @Parameter(name="prefer_sequence_per_entity", value="true"),
        @Parameter(name="optimizer", value="hilo"),
        @Parameter(name="increment_size", value="50")})
package org.example.model;

import org.hibernate.annotations.GenericGenerator;
import org.hibernate.annotations.Parameter;

在使用方面,您只需要

@Id @GeneratedValue(generator="optimized-sequence")
public long id;

我更喜欢使用单独的序列,因为有时我会放一个表并重新创建它,并且我希望ID从一个表开始。



 类似资料:
  • 问题内容: 我有一个实体- 。由描述。 Hibernate为每个实体创建一个表,因此当我调用时,我的数据总是保存到该表中。 现在,我需要另一个表来存储相同类型的数据,并且只需要将我的实体保存到该表中。 数据结构 (类似这样): 使用此方法 : 和结果,我应该在和 中。 由于系统限制,我无法将这两个对象放在一个表中。(即使创建额外的字段也是个坏主意)。 我可以不进行子类化吗?使用Programmat

  • 问题内容: 我似乎在Hibernate中映射列表时遇到问题。在我们的项目中有一类用含有类与含有。 Hibernate 是否可以使用注释进行映射?我的意思是,因为它没有注释? 问候 问题答案: 用途: 资料来源: 7.2.3。基本类型和可嵌入对象的集合

  • 问题内容: 我已将Hibernate配置为使用PostgreSQL序列(通过注释)为主键 id 列生成值,如下所示: 通过这种配置,我看到的是,hibernate时,hibernate已经分配了 id 值> 3000,而对已用序列的查询显示了以下内容: (1列) 问题: 是否有错? hibernate状态应该与序列表同步吗? 如果不是,它将在哪里存储最后生成的ID? 谢谢。 问题答案: 我有同样的

  • 问题内容: 语境 我正在创建一个数据库环境,在该环境中,我想以几种不同的模式拆分数据以用于不同的用户组。虽然,由于其中包含公共实体,所以应该将这些数据库之一共享给所有人。 假设数据库: DB1-通用实体; 车轮实体 DB2-组“ A”; 汽车实体 DB3-组“ B”; 摩托车实体 我有三个不同的项目: 项目1: 车轮豆 专案2: 汽车制造商 专案3: 摩托车构造者 问题 我正在尝试从项目/方案(2

  • 问题内容: 我有一个字段,例如,在表中应该是唯一的。 使用Spring / Hibernate验证进行验证的最佳方法是什么? 问题答案: 一种可能的解决方案是创建自定义约束(和相应的验证器)。并在数据库中查找现有记录,请提供(或Hibernate )to 的实例。 EntityManagerAwareValidator ConstraintValidatorFactoryImpl 唯一键 Uniq

  • 我有一个问题,“列表中的每个孩子都应该在我的应用程序中有一个唯一的“键”道具”错误。我可以打印表格,但我不知道为什么它给我这个错误,因为我提供了一个唯一的ID列表中的每个项目。 我也尝试过向我的表头添加一个键属性,但这并不能修复错误。 如有任何意见,将不胜感激 客户组件 表组件