Hibernate 6 对序列的命名策略是添加后缀:_SEQ
如何将后缀从 _SEQ 改为 $SEQ?
我创建了一个自定义命名策略来添加 $SEQ 后缀,因此序列名称将为 $SEQ。
public class CustomImplicitDatabaseObjectNamingStrategy
implements ImplicitDatabaseObjectNamingStrategy {
public static final String STRATEGY_NAME = "custom";
@Override
public QualifiedName determineSequenceName(
Identifier catalogName,
Identifier shemaName,
Map<?, ?> configValues,
ServiceRegistry serviceRegistry) {
final JdbcEnvironment jdbcEnvironment = serviceRegistry.getService(JdbcEnvironment.class);
String entityName = (String) configValues.get("jpa_entity_name");
String seqName = entityName + "$SEQ";
System.out.println("seqName " + seqName);
return new QualifiedSequenceName(
catalogName, shemaName, jdbcEnvironment.getIdentifierHelper().toIdentifier(seqName, false));
}
@Override
public QualifiedName determineTableName(
Identifier catalogName,
Identifier schemaName,
Map<?, ?> configValues,
ServiceRegistry serviceRegistry) {
return null;
}
}
此自定义命名策略在属性中引用:
spring.jpa.properties.hibernate.id.db_structure_naming_strategy
Hibernate 6 的默认增量步长为 50,但我的数据库序列只有 1。因此我尝试更改它:
@Id
@GeneratedValue(strategy = GenerationType.AUTO, generator = "my_entity_seq")
@SequenceGenerator(name = "my_entity_seq", allocationSize = 1)
@Column(name = "id")
Long id;
它不起作用,因为序列名称中添加了引号: 选择“MyEntityName$SEQ”.nextval
如何防止添加引号? 或者有更好的方法改变后缀吗?
您必须在 Hibernate 中使用自定义序列生成器。
修改为:
@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "custom_generator")
@GenericGenerator(name = "custom_gen", strategy = "org.hibernate.id.enhanced.SequenceStyleGenerator",
parameters = {
@Parameter(name = SequenceStyleGenerator.CONFIG_SEQUENCE_PER_ENTITY_SUFFIX, value = "$seq"),
@Parameter(name = SequenceStyleGenerator.INITIAL_PARAM, value = "1"),
@Parameter(name = SequenceStyleGenerator.INCREMENT_PARAM, value = "1")})
@Column(name = "id")
Long id;
看看这是否有帮助