当使用Oracle序列时,Hibernate不会生成标识符。

3
我有以下映射:
@Entity
@SequenceGenerator(name="sacpSequenceGenerator", sequenceName="SACP_SEQ")
public class Sacp {

    private Integer id;


    @Id
    @GeneratedValue(strategy=GenerationType.SEQUENCE, generator="sacpSequenceGenerator")
    public Integer getId() {
        return this.id;
    }

    // other setter's and getter's
}

SACP表是根据以下方式映射的

ID NUT NULL NUMBER(4) 

当我尝试保存一个 Sacp 实例时,Hibernate 报错:

ORA-01438:该列允许的精度比指定的精度大

即使使用 Long 而不是 Integer,仍会抛出相同的错误。

我应该怎么做才能解决这个问题?

1个回答

2

我找到了这个

SEQ_GEN定义了一个序列生成器,使用名为my_sequence的序列。该序列基于hilo算法,分配大小为20。请注意,此版本的Hibernate注释不处理序列生成器中的initialValue。默认的分配大小为50,因此如果您想使用序列并每次拾取值,则必须将分配大小设置为1。

现在它可以正常工作了。


你不应该更改默认的分配大小:http://itdevworld.wordpress.com/2009/12/20/hibernate-sequencegenerator-with-allocationsize1-leads-to-huge-contention/。请参考https://dev59.com/dnI95IYBdhLWcg3wyBGc#7055760获取一个有效的示例。 - Tristan

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接