java - 我正在尝试使用 H2 内存数据库和自定义 @GenericGenerator 策略,但在内部我的 customeId 生成器没有被调用
问题描述
我正在使用 H2 数据库创建一个 Spring Boot 应用程序,并且我想customId
使用一些前缀创建一个生成器,但它没有被创建。
正如我FilmsIdGenerator
通过如下扩展创建的SequenceStyleGenerator
。但是在为主要列生成值时,不会调用自定义生成器show_id
。它没有附加我提到的前缀,例如 B_00001 理想情况下应该是为主键创建的格式,show_id
但它正在创建默认的 s1,s2 ... 任何人都可以帮忙
public class FilmsIdGenerator extends SequenceStyleGenerator {
public static final String VALUE_PREFIX_PARAMETER = "valuePrefix";
public static final String VALUE_PREFIX_DEFAULT = "";
private String valuePrefix;
public static final String NUMBER_FORMAT_PARAMETER = "numberFormat";
public static final String NUMBER_FORMAT_DEFAULT = "%d";
private String numberFormat;
@Override
public Serializable generate(SharedSessionContractImplementor session,
Object object) throws HibernateException {
return valuePrefix + String.format(numberFormat, super.generate(session, object));
}
@Override
public void configure(Type type, Properties params,
ServiceRegistry serviceRegistry) throws MappingException {
super.configure(LongType.INSTANCE, params, serviceRegistry);
valuePrefix = ConfigurationHelper.getString(VALUE_PREFIX_PARAMETER,
params, VALUE_PREFIX_DEFAULT);
numberFormat = ConfigurationHelper.getString(NUMBER_FORMAT_PARAMETER,
params, NUMBER_FORMAT_DEFAULT);
}
}
上面给出的是我的自定义 id 生成器类,它应该创建 B_00001 格式的主键 id。但它采用默认序列格式,即 s1、s2、.. 等我使用的是 H2 数据库。谁能告诉我为什么没有在我的主键上调用自定义生成器 JPA 正在为持久性生成主键 ID?
下面给出的是实体类,我将 customidgenerator 作为策略和 3 个输入参数传递,我需要生成格式为 B_00001 的主键,但它正在生成 s1、s2、.. 即它采用默认序列格式。为什么我的自定义 id 生成器没有被应用到它。
因为我通过如下实现 SequenceStyleGenerator 创建了 customIdgenerator,但是在生成主列 show_id 时没有调用自定义生成器。它没有附加我提到的前缀,如 B_00001 理想情况下应该是为主键 show_id 创建的格式,但它是创建定义
@Table(name = "FILMS")
public class Films implements Serializable, Comparator {
/**
*
*/
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "film_seq")
@GenericGenerator(name = "film_seq", strategy = "com.films.demo.model.generator.FilmsIdGenerator", parameters = {
@Parameter(name = FilmsIdGenerator.INCREMENT_PARAM, value = "50"),
@Parameter(name = FilmsIdGenerator.VALUE_PREFIX_PARAMETER, value = "B_"),
@Parameter(name = FilmsIdGenerator.NUMBER_FORMAT_PARAMETER, value = "%05d") })
@Column(name = "show_id")
private String show_id;
解决方案
我已经将它与 db2 数据库一起使用。它正在生成具有正确前缀的正确 show_id。这个问题似乎只存在于内存数据库中的 h2
推荐阅读
- react-native - undefined 不是对象(评估“module.type”)
- r - 在 r 中解释 GAM 模型输出图
- node.js - 'ng' 未被识别为 cmdlet 的名称
- c# - 嵌套的异步/等待未引发异常
- java - 我需要一个正则表达式模式,它匹配 digit 后跟 dot max 5 次,没有空格
- python-3.x - TypeError: __init__() 得到了一个意外的关键字参数“param_distributions”
- r - 使用正则表达式从 R 中的字符串中提取特定长度的数值
- html -
- 元素走出它的各自
界限 - python - 如何在休息时收到 TGT 后从 cas 成功注销
- javascript - 在导航栏中切换选项卡后,如何在首次加载时自动刷新页面一次?