Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Hibernate 4-未启用getGeneratedKeys()支持_Hibernate_Generator_Sequence - Fatal编程技术网

Hibernate 4-未启用getGeneratedKeys()支持

Hibernate 4-未启用getGeneratedKeys()支持,hibernate,generator,sequence,Hibernate,Generator,Sequence,我们正在将hibernate从3.6版升级到4.1.9版,我遇到了一个错误 [#2013-01-14T18:33:46.519+0530 | INFO | glassfish3.1.1 | javax.enterprise.system.std.com.sun.enterprise.server.logging | u ThreadID=122;| u ThreadName=Thread-3;| 2013-01-14 18:33:46518[http-Thread-pool-8080(5)]ER

我们正在将hibernate从3.6版升级到4.1.9版,我遇到了一个错误

[#2013-01-14T18:33:46.519+0530 | INFO | glassfish3.1.1 | javax.enterprise.system.std.com.sun.enterprise.server.logging | u ThreadID=122;| u ThreadName=Thread-3;| 2013-01-14 18:33:46518[http-Thread-pool-8080(5)]ERROR envId{}-sesId-com.spmsoftware.webframework.exception.exception.ExceptionHandlerUtil[31]-未处理异常! org.hibernate.AssertionFailure:getGeneratedKeys()支持未启用 在org.hibernate.engine.jdbc.internal.statementPrepareImpl.checkAutoGeneratedKeysSupportEnabled(statementPrepareImpl.java:93)~[hibernate-core-4.1.9.Final.jar:4.1.9.Final] 在org.hibernate.engine.jdbc.internal.statementPrepareImpl.prepareStatement(statementPrepareImpl.java:112)~[hibernate-core-4.1.9.Final.jar:4.1.9.Final] 在org.hibernate.id.SequenceIdentityGenerator$Delegate.prepare(SequenceIdentityGenerator.java:106)~[hibernate-core-4.1.9.Final.jar:4.1.9.Final] 在org.hibernate.id.insert.AbstractReturningDelegate.performInsert(AbstractReturningDelegate.java:55)~[hibernate-core-4.1.9.Final.jar:4.1.9.Final] 在org.hibernate.persister.entity.AbstractEntityPersister.insert(AbstractEntityPersister.java:2936)~[hibernate-core-4.1.9.Final.jar:4.1.9.Final] 在org.hibernate.persister.entity.AbstractEntityPersister.insert(AbstractEntityPersister.java:3447)~[hibernate-core-4.1.9.Final.jar:4.1.9.Final] 在org.hibernate.action.internal.EntityIdentityInsertAction.execute(EntityIdentityInsertAction.java:81)~[hibernate-core-4.1.9.Final.jar:4.1.9.Final] 在org.hibernate.engine.spi.ActionQueue.execute(ActionQueue.java:362)~[hibernate-core-4.1.9.Final.jar:4.1.9.Final] 在org.hibernate.engine.spi.ActionQueue.addResolvedEntityInsertAction(ActionQueue.java:203)~[hibernate-core-4.1.9.Final.jar:4.1.9.Final] 在org.hibernate.engine.spi.ActionQueue.addInsertAction(ActionQueue.java:183)~[hibernate-core-4.1.9.Final.jar:4.1.9.Final] 在org.hibernate.engine.spi.ActionQueue.addAction(ActionQueue.java:167)~[hibernate-core-4.1.9.Final.jar:4.1.9.Final] 在org.hibernate.event.internal.AbstractSaveEventListener.addInsertAction(AbstractSaveEventListener.java:320)~[hibernate-core-4.1.9.Final.jar:4.1.9.Final] 在org.hibernate.event.internal.AbstractSaveEventListener.performSaveOrReplicate(AbstractSaveEventListener.java:287)~[hibernate-core-4.1.9.Final.jar:4.1.9.Final] 在org.hibernate.event.internal.AbstractSaveEventListener.performSave(AbstractSaveEventListener.java:193)~[hibernate-core-4.1.9.Final.jar:4.1.9.Final] 在org.hibernate.event.internal.AbstractSaveEventListener.SaveWithGenerateId(AbstractSaveEventListener.java:126)~[hibernate-core-4.1.9.Final.jar:4.1.9.Final] 在org.hibernate.ejb.event.EJB3PersistEventListener.saveWithGenerateId(EJB3PersistEventListener.java:78)~[hibernate-entitymanager-4.1.9.Final.jar:4.1.9.Final] 在org.hibernate.event.internal.DefaultPersistEventListener.entityIsTransient(DefaultPersistEventListener.java:208)~[hibernate-core-4.1.9.Final.jar:4.1.9.Final] 在org.hibernate.event.internal.DefaultPersistEventListener.onPersist(DefaultPersistEventListener.java:151)~[hibernate-core-4.1.9.Final.jar:4.1.9.Final] 在org.hibernate.event.internal.DefaultPersistEventListener.onPersist(DefaultPersistEventListener.java:78)~[hibernate-core-4.1.9.Final.jar:4.1.9.Final] 在org.hibernate.internal.SessionImpl.firePersist(SessionImpl.java:843)~[hibernate-core-4.1.9.Final.jar:4.1.9.Final] 在org.hibernate.internal.SessionImpl.persist(SessionImpl.java:818)~[hibernate-core-4.1.9.Final.jar:4.1.9.Final] 在org.hibernate.internal.SessionImpl.persist(SessionImpl.java:822)~[hibernate-core-4.1.9.Final.jar:4.1.9.Final] 在org.hibernate.ejb.AbstractEntityManagerImpl.persist(AbstractEntityManagerImpl.java:865)~[hibernate-entitymanager-4.1.9.Final.jar:4.1.9.Final]

当我试图持久化具有以下定义的hibernate实体时,就会看到这个错误

@Entity
@Table(name = "ACCESS")
@GenericGenerator(name = "auth-generator",
    strategy = "sequence-identity",
    parameters = @org.hibernate.annotations.Parameter(name = "sequence", value = "ACCESS_SEQ"))
 public class Access implements Identifiable {
    private Long id;

   @Id
   @GeneratedValue(generator = "auth-generator")
   @Column(name = "ROW_IDENTIFIER", nullable = false)
    public Long getId() {
        return id;
    }
 }
在比较3.6版的hibernate源代码时,我发现hibernate在为SequenceIdentityGenerator创建准备好的语句时,并没有检查“hibernate.jdbc.use_get_generated_keys”(AbstractBatcher-506)和4.1.9版(StatementPrepareImpl-112)


因此,我们的应用程序在升级时失败。您知道这一更改背后的原因吗?

我也遇到了同样的问题。终于找到了解决办法。请将这一行放在您的hibernate.cfg.xml文件中

<property name="hibernate.jdbc.use_get_generated_keys">true</property>
true
参考和解释可在以下内容中找到:


这确实是解决方案。谢谢!对于spring引导应用程序,这可以是
spring.jpa.properties.hibernate.jdbc.use_get_generated_key:true
在grails应用程序的属性文件中设置--DataSource.groovy
hibernate.jdbc.use_get_generated_keys=true
我在创建hibernate属性时使用了这个解决方案正在实例化sessionFactoryBean
return new Properties(){{setProperty(“hibernate.dialogue”、“org.hibernate.dialogue.Oracle10gDialogue”)setProperty(“hibernate.jdbc.use_get_generated_keys”、“true”);};