【问题标题】:Hibernate custom sequence generator - Table doesn't existHibernate 自定义序列生成器 - 表不存在
【发布时间】:2020-03-20 18:05:52
【问题描述】:

我正在使用自定义类来生成 id:

public class StringPrefixedSequenceIdGenerator extends SequenceStyleGenerator

在实体属性上也使用这个类:

@Id
    @GenericGenerator(name = "pipeline_seq_generator", strategy = "com.model.StringPrefixedSequenceIdGenerator", parameters = {
            @Parameter(name = StringPrefixedSequenceIdGenerator.INCREMENT_PARAM, value = "50") })
    @GeneratedValue(generator = "pipeline_seq_generator", strategy = GenerationType.SEQUENCE)
    @Column(name = "pipeline_id", unique = true, nullable = false, length = 100)
    public String getPipelineId() {
        return this.pipelineId;
    }

问题是hibernate仍然尝试从数据库中获取序列:
从 pipeline_seq_generator 中选择 next_val 作为 id_val 进行更新

错误:java.sql.SQLSyntaxErrorException:表'table.pipeline_seq_generator'不存在

编辑:当我在我的方法中将 super.generate(session,object) 作为参数传递时,@Override 生成方法导致休眠从数据库调用序列:

@Override
    public Serializable generate(SharedSessionContractImplementor session,
            Object object) throws HibernateException {
        return String.format(format, LocalDate.now(), super.generate(session, object));
    }

【问题讨论】:

    标签: spring-boot java-8 hibernate-5.x


    【解决方案1】:

    我将 generate 方法的实现改为不使用 super.generate(session, object):

    @Override
        public Serializable generate(SharedSessionContractImplementor session,
                Object object) throws HibernateException {
            LocalTime localTime = LocalTime.now();
            return prefix + String.format(format, LocalDate.now()) + localTime.getHour() + localTime.getMinute() + localTime.getSecond();
        }
    

    在这个模型中,我只使用我的实现而不使用序列数据库。

    【讨论】:

      【解决方案2】:

      在 公共无效配置(类型类型,属性属性, ServiceRegistry serviceRegistry) 抛出 MappingException {

      // 忽略 (String) Type 输入参数并使用新的 LongType() super.configure(new LongType(), properties, serviceRegistry);

      Hibernate (liquibase) 中的序列不能生成字符串类型

      在此之后,您可以使用: 字符串 toString = super.generate(session, object).toString(); 在生成方法中并添加前缀。

      【讨论】:

        猜你喜欢
        • 2023-03-31
        • 1970-01-01
        • 1970-01-01
        • 2011-03-21
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-06-19
        相关资源
        最近更新 更多