当前位置: 首页 > 面试题库 >

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

罗毅
2023-03-14
问题内容

我有以下映射

@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,也会引发相同的错误

我该怎么解决?


问题答案:

我发现了这个

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

现在工作正常



 类似资料:
  • 问题内容: 我正在使用oracle 11g,Java(struts2)和Hibernate开发应用程序。 我有一个名为mytemp的表,其列mytemp_id为NUMBER(22,0)类型。 在我的mytemp.hbm.xml文件中,ID如下所示 在我的Oracle数据库中,创建了名为“ MYTEMP_TEMP_ID_SEQ”的序列,并在Oracle中正常工作。 现在,当我尝试使用hibernat

  • 问题内容: 我有一个具有以下定义的类: 当我们在Jboss 4.2.3上运行它时,它可以正常工作并生成正确的ID(从1000+开始) 现在我们转到jboss 7.1.1,它会生成负ID!(从-498开始,然后上升) 知道为什么会发生这种情况吗? 问题答案: 从JBoss 6.1迁移到JBoss 7.1时遇到了这个问题。 根据JBoss AS 7.1 JPA文档(https://docs.jboss

  • 问题内容: 我正在将spring,h2和liquibase与hibernate一起使用,并且试图通过以本博客文章为例为我的实体创建自定义String id生成器,但出现错误: 这是我的SequenceStyleGenerator代码: 我的实体代码: 和liquibase XML: 顺便说一句,有可能避免参数sequence_name,以便hibernate可以自行处理吗? 如果有人可以帮助我,谢

  • 问题内容: Hibernate文档说: 如果使用身份标识符生成器,​​则Hibernate透明地在JDBC级别禁用插入批处理。 但是我所有的实体都具有以下配置: 当我在上方使用此身份时 有什么问题吗? 批量插入被禁用了吗? 我该如何解决? 问题答案: Hibernate尝试将持久性上下文刷新推迟到最后可能的时刻。传统上,这种策略被称为事务后写。 后写与Hibernate刷新更相关,而不是任何逻辑或

  • 问题内容: 我陷入了这个问题。数据库架构是由其他人提供的,因此我不能简单地更改名称。我尝试在各处添加适当的注释,也许我遗漏了一些(显而易见的)? 这是我的完整映射(很多类),我将省略getter / setter。 问题是当hibernate试图获得全部 控制规则 ControlRuleAttrib ControleRuleAttribPK 这里的问题是,是否有可能以某种方式得到实体的?如您所见,