Comment insérer de nouveaux éléments avec mise en veille prolongée?
J'ai une classe d'entité appelée Task
qui est mappé dans hibernate.
Je suis en mesure de récupérer les éléments existants appartenant à cette classe correctement, donc je ne pense pas que ce soit un problème avec le mapping de la classe.
Cependant, lorsque j'essaie d'insérer un nouvel élément, j'obtiens l'erreur suivante:
org.hibernate.exception.SQLGrammarException: error performing isolated work
at org.hibernate.exception.internal.SQLExceptionTypeDelegate.convert(SQLExceptionTypeDelegate.java:80)
at org.hibernate.exception.internal.StandardSQLExceptionConverter.convert(StandardSQLExceptionConverter.java:49)
at org.hibernate.engine.jdbc.spi.SqlExceptionHelper.convert(SqlExceptionHelper.java:126)
at org.hibernate.engine.jdbc.spi.SqlExceptionHelper.convert(SqlExceptionHelper.java:112)
at org.hibernate.engine.transaction.internal.jdbc.JdbcIsolationDelegate.delegateWork(JdbcIsolationDelegate.java:96)
at org.hibernate.id.enhanced.TableStructure$1.getNextValue(TableStructure.java:131)
at org.hibernate.id.enhanced.NoopOptimizer.generate(NoopOptimizer.java:58)
at org.hibernate.id.enhanced.SequenceStyleGenerator.generate(SequenceStyleGenerator.java:422)
at org.hibernate.event.internal.AbstractSaveEventListener.saveWithGeneratedId(AbstractSaveEventListener.java:117)
at org.hibernate.event.internal.DefaultSaveOrUpdateEventListener.saveWithGeneratedOrRequestedId(DefaultSaveOrUpdateEventListener.java:209)
at org.hibernate.event.internal.DefaultSaveOrUpdateEventListener.entityIsTransient(DefaultSaveOrUpdateEventListener.java:194)
at org.hibernate.event.internal.DefaultSaveOrUpdateEventListener.performSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:114)
at org.hibernate.event.internal.DefaultSaveOrUpdateEventListener.onSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:90)
at org.hibernate.internal.SessionImpl.fireSaveOrUpdate(SessionImpl.java:680)
at org.hibernate.internal.SessionImpl.saveOrUpdate(SessionImpl.java:672)
Dans le code suivant:
Task t = new Task();
t.title = "foo";
t.comment = "bar";
//snip... (every single field of task is given some value, except for id)
session.saveOrUpdate("Task", t); //This is the line on which the exception occurs
Si je ne fais pas saveOrUpdate()
, puis la nouvelle tâche n'est pas inséré dans la base.
Ce que je fais mal?
Edit: session.save(task)
ne fonctionne pas, soit
Je ne vois pas d'insérer ou de mettre à jour sql, la dernière question qu'elle montre avant de jeter l'exception est la suivante:
Pouvez-vous essayer de session.enregistrer(t);
Juste essayé, il donne le même message d'erreur
Quelqu'un peut confirmer si
J'ai changé à
Hibernate: select next_val as id_val from hibernate_sequence for update
Pouvez-vous essayer de session.enregistrer(t);
Juste essayé, il donne le même message d'erreur
Quelqu'un peut confirmer si
public long id = 0;
de l'identité est-elle autorisée?J'ai changé à
public long id
, cependant il n'a pas d'effet.OriginalL'auteur Click Upvote | 2014-03-18
Vous devez vous connecter pour publier un commentaire.
Eu que cela fonctionne avec l'aide de ce lien: http://www.coderanch.com/t/487173/ORM/databases/hibernate-sequence-exist
Apparemment hibernate recherche de la séquence de tables pour la génération de l'id. Définissant les éléments suivants:
sur l'id, elle utilise les sous-jacents de la db incrément automatique et de ne pas essayer de générer l'id lui-même, et maintenant ça fonctionne.
OriginalL'auteur Click Upvote
Si quelqu'un d'autre est aux prises avec cette erreur, j'ai corrigé en supprimant
De mise en veille prolongée propriétés.
OriginalL'auteur numsu
J'ai accidentellement supprimé hibernate_sequence table dans ma db.
Modification:
à
Dans votre application.fichier de propriétés
donc, Hibernate pourrait recréer ce tableau en lui-même
OriginalL'auteur lord5et