2014-05-07 94 views
3

我有我的应用程序与Spring3那么好。基本上客户希望将数据库从mysql迁移到oracle。所以一切都是正确的。问题与oracle的顺序一起呈现。我在各方面都试图配置Hibernate,但我总是得到错误带休眠的Oracle序列

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; 

有人能帮助我吗?

+0

你检查右边的相关帖子将这个注释? – Stefan

回答

1

,如果你想使用它与Oracle

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

然后删除项目 @SequenceGenerator(name =“my_entity_seq_gen”,sequenceName =“SEQ_PROFILI”) –

+0

@FlavioMerolli您不应删除它,序列生成器负责生成值。它使用模拟序列值的数据库对象。在oracle中它是本地对象,在mysql中它是一个表。你应该添加nullable = false到id字段。使用http://stackoverflow.com/a/13512585/573032更新表格 –