所以我有这样的自定义 IdGenerator :
@Service
public class IdGenerator extends SequenceStyleGenerator {
private final SequenceRepository sequenceRepository;
public IdGenerator(SequenceRepository sequenceRepository) {
this.sequenceRepository = sequenceRepository;
}
@Override
public Serializable generate(SharedSessionContractImplementor session, Object object) throws HibernateException {
BaseObject type = ((BaseObject) object);
return StringUtils.getNumberWithMaxRadix(sequenceRepository.getNext(type.sequenceName()));
}
}
在实体 ID 字段 Hibernate 注释上:
@Id
@Column(name = "id", nullable = false, length = 18)
@SequenceGenerator(name = "location_road_seq", sequenceName = "location_road_seq", allocationSize = 10)
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "location_road_seq")
@GenericGenerator(
name = "location_road_seq",
strategy = "com.wildtigerrr.bestgamebot.bin.service.base.IdGenerator",
parameters = {
@org.hibernate.annotations.Parameter(name = IdGenerator.VALUE_PREFIX_PARAMETER, value = "a0lr")
})
private String id;
当使用 Hibernate 从代码中插入对象时 - 就像一个魅力。但是我需要使用 Liquibase 插入初始数据,在这里我从 Liquibase 变更集中插入数据时遇到问题:
INSERT INTO location (id, system_name)
VALUES (nextval('location_seq'), 'TestLocation');
从序列中返回简单值作为 Id。
有没有一个选项,我应该如何配置 Liquibase 以使用我的 IdGenerator?
如果不可能,克服该问题的最佳实践/可能的解决方案是什么?对于任何反馈,我们都表示感谢!