0

所以我有这样的自定义 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?

如果不可能,克服该问题的最佳实践/可能的解决方案是什么?对于任何反馈,我们都表示感谢!

4

0 回答 0