【问题标题】:Oracle sequence with Hibernate使用 Hibernate 的 Oracle 序列
【发布时间】:2014-06-24 02:03:34
【问题描述】:

我的 Spring 3 应用程序运行良好。基本上客户想将数据库从 MySQL 迁移到 Oracle。所以一切都是正确的;问题出现在Oracle的序列中。我尝试了各种方式来配置 Hibernate,但我总是得到错误

org.hibernate.id.IdentifierGenerationException: ids for this class must be manually assi

gned before calling save():     
org.hibernate.id.Assigned.generate(Assigned.java:52)
        org.hibernate.event.internal.AbstractSaveEventListener.saveWithGeneratedId(AbstractSaveEventListener.java:117)
        org.hibernate.event.internal.DefaultSaveOrUpdateEventListener.saveWithGeneratedOrRequestedId(DefaultSaveOrUpdateEventListener.java:206)
        org.hibernate.event.internal.DefaultSaveOrUpdateEventListener.entityIsTransient(DefaultSaveOrUpdateEventListener.java:191)
        org.hibernate.event.internal.DefaultSaveOrUpdateEventListener.performSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:114)
        org.hibernate.event.internal.DefaultSaveOrUpdateEventListener.onSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:90)
        org.hibernate.internal.SessionImpl.fireSaveOrUpdate(SessionImpl.java:735)
        org.hibernate.internal.SessionImpl.saveOrUpdate(SessionImpl.java:727)
        org.hibernate.internal.SessionImpl.saveOrUpdate(SessionImpl.java:723)
        it.openingcode.vwh.dao.AbstractHibernateDAOImpl.save(AbstractHibernateDAOImpl.java:48)
        it.openingcode.vwh.dao.AbstractHibernateDAOImpl.save(AbstractHibernateDAOImpl.java:20)
        it.openingcode.vwh.services.AbstractCrudServiceImpl.save(AbstractCrudServiceImpl.java:70)
        it.openingcode.vwh.services.AbstractCrudServiceImpl.saveAll(AbstractCrudServiceImpl.java:77)
        it.openingcode.vwh.services.PrivilegiServiceImpl.updateFromGruppo(PrivilegiServiceImpl.java:92)
        sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
        sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)  java.lang.reflect.Method.invoke(Method.java:606)

在模型中我添加了如下注解:

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO, generator="my_entity_seq_gen")
    @SequenceGenerator(name="my_entity_seq_gen", sequenceName="SEQ_PROFILI")
    @Column(name = "ID")
    private Long id;

【问题讨论】:

  • 右边的相关帖子你查了吗?

标签: java oracle hibernate


【解决方案1】:

如果你想和 Oracle 一起使用,请添加这个注解

@GeneratedValue(strategy = GenerationType.SEQUENCE, generator="my_entity_seq_gen")

【讨论】:

  • 然后删除项目@SequenceGenerator(name="my_entity_seq_gen", sequenceName="SEQ_PROFILI")
  • @FlavioMerolli 你不应该删除它,序列生成器负责生成值。它使用模拟序列值的数据库对象。在 oracle 中它是本机对象,在 mysql 中它是一个表。您应该将 nullable=false 添加到 id 字段。使用stackoverflow.com/a/13512585/573032 更新表
猜你喜欢
  • 1970-01-01
  • 2013-11-04
  • 1970-01-01
  • 2015-08-20
  • 2012-11-05
  • 1970-01-01
  • 2017-05-05
  • 1970-01-01
  • 2010-12-16
相关资源
最近更新 更多