2013-01-15 26 views
7

Jesteśmy w trybie hibernacji aktualizacji z wersji 3.6 do 4.1.9 i jestem stoi błądHibernate 4 - getGeneratedKeys() wsparcie nie jest włączona

[# | 2013-01-14T18: 33 : 46.519 + 0530 | INFO | glassfish3.1.1 | javax.enterprise.system.std.com.sun.enterprise.server.logging | _ThreadID = 122; _ThreadName = Thread-3; | 2013-01-14 18: 33: 46,518 [http-thread-pool-8080 (5)] ERROR envId {} - sesId {} - com.spmsoftware.webframework.exception.ExceptionHandlerUtil [31] - Nieobsługiwany wyjątek! org.hibernate.AssertionFailure: obsługa getGeneratedKeys() nie jest włączona na org.hibernate.engine.jdbc.internal.StatementPreparerImpl.checkAutoGeneratedKeysSupportEnabled (StatementPreparerImpl.java:93) ~ [hibernate-core-4.1.9.Final.jar: 4.1.9.Final] w org.hibernate.engine.jdbc.internal.StatementPreparerImpl.prepareStatement (StatementPreparerImpl.java:112) ~ [hibernate-core-4.1.9.Final.jar: 4.1.9.Final] w org.hibernate.id.SequenceIdentityGenerator $ Delegate.prepare (SequenceIdentityGenerator.java:106) ~ [hibernate-core-4.1.9.Final.jar: 4.1.9.Final] at org.hibernate.id.insert.AbstractReturningDelegate. performInsert (AbstractReturningDelegate.java:55) ~ [hibernate-core-4.1.9.Final.jar: 4.1.9.Final] at org.hibernate.persister.entity.AbstractEntityPersister.insert (AbstractEntityPersister.java:2936) ~ [ hiber nate-core-4.1.9.Final.jar: 4.1.9.Final] at org.hibernate.persister.entity.AbstractEntityPersister.insert (AbstractEntityPersister.java:3447) ~ [hibernate-core-4.1.9.Final. jar: 4.1.9.Final] at org.hibernate.action.internal.EntityIdentityInsertAction.execute (EntityIdentityInsertAction.java:81) ~ [hibernate-core-4.1.9.Final.jar: 4.1.9.Final] at org.hibernate.engine.spi.ActionQueue.execute (ActionQueue.java:362) ~ [hibernate-core-4.1.9.Final.jar: 4.1.9.Final] at org.hibernate.engine.spi.ActionQueue. addResolvedEntityInsertAction (ActionQueue.java:203) ~ [hibernate-core-4.1.9.Final.jar: 4.1.9.Final] at org.hibernate.engine.spi.ActionQueue.addInsertAction (ActionQueue.java:183) ~ [ hibernate-core-4.1.9.Final.jar: 4.1.9.Final] at org.hibernate.engine.spi.ActionQueue.addAction (ActionQueue.java:167) ~ [hibernate-core- 4.1.9.Final.jar: 4.1.9.Final] at org.hibernate.event.internal.AbstractSaveEventListener.addInsertAction (AbstractSaveEventListener.java:320) ~ [hibernate-core-4.1.9.Final.jar: 4.1. 9.Final] at org.hibernate.event.internal.AbstractSaveEventListener.performSaveOrReplicate (AbstractSaveEventListener.java:287) ~ [hibernate-core-4.1.9.Final.jar: 4.1.9.Final] at org.hibernate. event.internal.AbstractSaveEventListener.performSave (AbstractSaveEventListener.java:193) ~ [hibernate-core-4.1.9.Final.jar: 4.1.9.Final] at org.hibernate.event.internal.AbstractSaveEventListener.saveWithGeneratedId (AbstractSaveEventListener. java: 126) ~ [hibernate-core-4.1.9.Final.jar: 4.1.9.Final] na org.hibernate.ejb.event.EJB3PersistEventListener.saveWithGeneratedId (EJB3PersistEventListener.java:78) ~ [hibernate-entitymanager- 4.1.9.Final.jar: 4.1.9.Final] at org.hibernate.event.internal.DefaultPersistEventListener.entityIsTransient (DefaultPersistEventListener.java:208) ~ [hibernate-core-4.1.9.Final.jar: 4.1.9.Final] at org.hibernate.event.internal. DefaultPersistEventListener.onPersist (DefaultPersistEventListener.java:151) ~ [hibernate-core-4.1.9.Final.jar: 4.1.9.Final] at org.hibernate.event.internal.DefaultPersistEventListener.onPersist (DefaultPersistEventListener.java:78) ~ [hibernate-core-4.1.9.Final.jar: 4.1.9.Final] na org.hibernate.internal.SessionImpl.firePersist (SessionImpl.java:843) ~ [hibernate-core-4.1.9.Final. jar: 4.1.9.Final] at org.hibernate.internal.SessionImpl.persist (SessionImpl.java: 818) ~ [hibernate-core-4.1.9.Final.jar: 4.1.9.Final] at org. hibernate.internal.SessionImpl.persist (SessionImpl.java:822) ~ [hibernate-core-4.1.9.Final.jar: 4.1.9.Final] at org.hibernate.ejb.AbstractEntityManagerImpl.persist (AbstractEntityManagerImpl.java:865) ~ [hibernate-entitymanager-4.1.9.Final.jar: 4.1.9.Ostateczna]

Ten błąd jest widoczne, gdy staram się utrzymywać jednostkę hibernacji, który posiada następującą definicję

@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; 
    } 
} 

Na porównanie kodu źródłowego hibernacji do 3,6 Widziałam, że podczas tworzenia przygotowaną instrukcję dla SequenceIdentityGenerator hibernacji NIE sprawdza "hibernate.jdbc.use_get_generated_keys" (AbstractBatcher - 506), a dla wersji 4.1.9 robi (StatementPreparerImpl - 112).

Z tego powodu nasza aplikacja kończy się niepowodzeniem podczas aktualizacji. Masz pojęcie, co jest przyczyną tej zmiany?

Odpowiedz

11

Utknąłem w tym samym numerze. W końcu znalazłem wyjście. umieść tę linię w pliku hibernate.cfg.xml.

<property name="hibernate.jdbc.use_get_generated_keys">true</property> 

I odniesienia i wyjaśnienie, które można znaleźć w:

http://www.jarvana.com/jarvana/view/hibernate/hibernate/3.0.2/hibernate-3.0.2-sources.jar!/org/hibernate/jdbc/AbstractBatcher.java?format=ok

+0

To jest rzeczywiście rozwiązaniem. Dzięki! – Withheld

+2

dla aplikacji rozruchu wiosennego może to być plik 'spring.jpa.properties.hibernate.jdbc.use_get_generated_keys: true' ustawiony w pliku właściwości – Deepu

+0

dla aplikacji grails - w DataSource.groovy ' hibernate.jdbc.use_get_generated_keys = true' – argoden

Powiązane problemy