使用Hibernate操作Oracle序列

3

我有一个使用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;

你有在右边检查相关的帖子吗? - Stefan
1个回答

1

如果您想与Oracle一起使用,请添加此注释。

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

@序列生成器(name="my_entity_seq_gen", sequenceName="SEQ_PROFILI") - Flavio Merolli
@FlavioMerolli,您不应该删除它,序列生成器负责生成值。它使用模拟序列值的数据库对象。在Oracle中,它是本地对象,在MySQL中,它是一个表。您应该将nullable=false添加到id字段。使用http://stackoverflow.com/a/13512585/573032更新表。 - Roman C

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