我可以从实体设置数据库序列的最小/最大值吗?

2cmtqfgy  于 2021-07-24  发布在  Java
关注(0)|答案(1)|浏览(254)

有没有一种方法可以从实体本身排序最大值和最小值

qyuhtwio

qyuhtwio1#

我不认为有可能创造一个特定的序列 MINVALUE 或者 MAXVALUE 使用jpa或hibernate。
此任务的jpa特定注解是 SequenceGenerator 不接受 MINVALUE 或者 MAXVALUE . 它可以选择接受 initialValue 它影响序列的“start with”值,并可能隐式地设置 MINVALUE 或者 MAXVALUE .
例如,oracle数据库说 CREATE SEQUENCE 声明:
从…开始
指定要生成的第一个序列号。使用此子句以大于其最小值的值开始升序,或以小于其最大值的值开始降序。对于升序,默认值是序列的最小值。对于降序序列,默认值是序列的最大值。此整数值可以有28位或更少的数字。
有一个特定于hibernate的api GenericGenerator 以及 SequenceStyleGenerator 它可以用来创建一个序列(见一个例子),但它们似乎也不接受 MINVLAUE 或者 MAXVALUE 作为参数。
最后,快速查看hibernate的oracledb代码表明 MINVALUE 以及 MAXVALUE 基于提供的 initialValue 正如上面的oracle文档所示。例如,以下是相关代码:

protected String getCreateSequenceString(String sequenceName, int initialValue, int incrementSize) {
        if ( initialValue < 0 && incrementSize > 0 ) {
            return
                String.format(
                        "%s minvalue %d start with %d increment by %d",
                        getCreateSequenceString( sequenceName ),
                        initialValue,
                        initialValue,
                        incrementSize
                );
        }
        else if ( initialValue > 0 && incrementSize < 0 ) {
            return
                String.format(
                        "%s maxvalue %d start with %d increment by %d",
                        getCreateSequenceString( sequenceName ),
                        initialValue,
                        initialValue,
                        incrementSize
                );
        }
        else {
            return
                String.format(
                        "%s start with %d increment by  %d",
                        getCreateSequenceString( sequenceName ),
                        initialValue,
                        incrementSize
                );
        }
    }

我假设除了支持序列的oracle之外,其他数据库也应该如此。

相关问题