IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Hibernate Java Discussion :

Problème de clé étrangère avec PostgreSQL


Sujet :

Hibernate Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2008
    Messages
    379
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 40
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2008
    Messages : 379
    Par défaut Problème de clé étrangère avec PostgreSQL
    Bonjour à tous !

    j'ai une application web avec les technos suivantes : Spring 3 - JPA 2 - Hibernate 3.5.6.
    Au début j'utilisais le SGBD MySQL, mais certains problèmes de gestion des transactions m'ont poussés à essayer avec un autre SGBD (problème en question abordé dans cet autre sujet).

    J'ai donc installé PostgreSQL, changé la configuration JPA, et la magie des applis multicouches a opéré.
    Mais une fois que j'ai enlevé le patch qui contournait le problème de transaction pour MySQL (des @Transactional(propagation=Propagation.NEVER) sur un certain nombre de méthodes), une erreur de clé étrangère est apparue.

    J'en viens donc au problème à proprement parlé (désolée pour le message un peu long, mais je me dis toujours qu'il est plus facile de résoudre un problème quand on a son contexte ) :
    J'ai une entité Questionnaire et une entité Question. un Questionnaire contient plusieurs questions et une question ne se rapporte qu'à un seul questionnaire. Donc j'ai un champs idQuestionnaire dans mon entité Question qui est une clé étrangère vers le Questionnaire. Voici le mapping de ces deux entités :
    Question :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    @Entity
    public class Question extends DomainObject {
    	private static final long serialVersionUID = 1L;
     
    	@Id
    	@GeneratedValue(strategy = GenerationType.AUTO)
    	private Long idQuestion;
     
    	private Integer numQuestion;
    	private String question;
    	private String typeReponse;
     
    	@ManyToOne(fetch = FetchType.LAZY)
    	@JoinColumn(name = "idQuestionnaire")
    	private Questionnaire questionnaire;
    //Constructeurs, getters and setters
    Questionnaire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    @Entity
    public class Questionnaire extends DomainObject {
     
    	private static final long serialVersionUID = 1L;
     
    	@Id
    	@GeneratedValue(strategy = GenerationType.AUTO)
    	@Column(name = "idQuestionnaire", nullable = false)
    	private Long idQuestionnaire;
     
    	private String numero;
    	private String titre;
    	private Character sexeDestinataire;
    	private Boolean publie;
     
    	@OneToMany(mappedBy = "pk.questionnaire", cascade = {CascadeType.REMOVE}, fetch = FetchType.LAZY)
    	private List<ListeQuestionnaire> listeQuestionnaires = new ArrayList<ListeQuestionnaire>();
     
    	@OneToMany(mappedBy = "questionnaire", cascade={CascadeType.REMOVE}, fetch = FetchType.LAZY)
    	private List<Question> listeQuestions = new ArrayList<Question>();
     
    	@OneToMany(mappedBy = "questionnaire", cascade={CascadeType.REMOVE}, fetch = FetchType.LAZY)
    	private List<Reponse> listeReponses = new ArrayList<Reponse>();
    //Constructeurs, getters and setters
    Mes tests du dao du Questionnaire passent sans problème, par contre les tests du dao des questions passent pas. Lors de la méthode d'initialisation des données :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    @Before
    @Transactional
    public void startTransaction() throws ParseException{
    	Questionnaire q1 = new Questionnaire();
    	q1.setNumero("Q1");
    	q1.setTitre("Nutrition");
    	q1.setSexeDestinataire('b');
    	questionnaire = serviceQuestionnaire.saveOne(q1);
     
    	Question question1 = new Question();
    	question1.setNumQuestion(1);
    	question1.setQuestion("question 1");
    	question1.setTypeReponse("texte");
    	question1.setQuestionnaire(questionnaire);
     
    	question = questionDao.saveOne(question1);
    }
    la ligne question = questionDao.saveOne(question1); génère l'erreur suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    WARN  - JDBCExceptionReporter      - SQL Error: 0, SQLState: 23503
    ERROR - JDBCExceptionReporter      - L'élément du batch 0 insert into Question (numQuestion, question, idQuestionnaire, typeReponse, idQuestion) values ('1', 'question 1', '1', 'texte', '2') a été annulé. Appeler getNextException pour en connaître la cause.
    WARN  - JDBCExceptionReporter      - SQL Error: 0, SQLState: 23503
    ERROR - JDBCExceptionReporter      - ERROR: insert or update on table "question" violates foreign key constraint "fkbe5ca00676039098"
      Détail*: Key (idquestionnaire)=(1) is not present in table "questionnaire".
    ERROR - tractFlushingEventListener - Could not synchronize database state with session
    org.hibernate.exception.ConstraintViolationException: Could not execute JDBC batch update
    	at org.hibernate.exception.SQLStateConverter.convert(SQLStateConverter.java:96)
    	at org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:66)
    	at org.hibernate.jdbc.AbstractBatcher.executeBatch(AbstractBatcher.java:275)
    	at org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:262)
    	at org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:178)
    	at org.hibernate.event.def.AbstractFlushingEventListener.performExecutions(AbstractFlushingEventListener.java:321)
    	at org.hibernate.event.def.DefaultFlushEventListener.onFlush(DefaultFlushEventListener.java:51)
    	at org.hibernate.impl.SessionImpl.flush(SessionImpl.java:1206)
    	at org.hibernate.ejb.AbstractEntityManagerImpl.flush(AbstractEntityManagerImpl.java:791)
    	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
    	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    	at java.lang.reflect.Method.invoke(Method.java:597)
    	at org.springframework.orm.jpa.ExtendedEntityManagerCreator$ExtendedEntityManagerInvocationHandler.invoke(ExtendedEntityManagerCreator.java:365)
    	at $Proxy30.flush(Unknown Source)
    	at fr.statlife.protoE4N.data.dao.jpa.AbstractDaoJPAImpl.saveOne(AbstractDaoJPAImpl.java:45)
    	at fr.statlife.protoE4N.data.dao.jpa.TestQuestionDao.startTransaction(TestQuestionDao.java:54)
    	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
    	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    	at java.lang.reflect.Method.invoke(Method.java:597)
    	at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:44)
    	at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:15)
    	at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:41)
    	at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:27)
    	at org.springframework.test.context.junit4.statements.RunBeforeTestMethodCallbacks.evaluate(RunBeforeTestMethodCallbacks.java:74)
    	at org.springframework.test.context.junit4.statements.RunAfterTestMethodCallbacks.evaluate(RunAfterTestMethodCallbacks.java:82)
    	at org.springframework.test.context.junit4.statements.SpringRepeat.evaluate(SpringRepeat.java:72)
    	at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:240)
    	at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:50)
    	at org.junit.runners.ParentRunner$3.run(ParentRunner.java:193)
    	at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:52)
    	at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:191)
    	at org.junit.runners.ParentRunner.access$000(ParentRunner.java:42)
    	at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:184)
    	at org.springframework.test.context.junit4.statements.RunBeforeTestClassCallbacks.evaluate(RunBeforeTestClassCallbacks.java:61)
    	at org.springframework.test.context.junit4.statements.RunAfterTestClassCallbacks.evaluate(RunAfterTestClassCallbacks.java:70)
    	at org.junit.runners.ParentRunner.run(ParentRunner.java:236)
    	at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.run(SpringJUnit4ClassRunner.java:180)
    	at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:49)
    	at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)
    	at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:467)
    	at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:683)
    	at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:390)
    	at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:197)
    Caused by: java.sql.BatchUpdateException: L'élément du batch 0 insert into Question (numQuestion, question, idQuestionnaire, typeReponse, idQuestion) values ('1', 'question 1', '1', 'texte', '2') a été annulé. Appeler getNextException pour en connaître la cause.
    	at org.postgresql.jdbc2.AbstractJdbc2Statement$BatchResultHandler.handleError(AbstractJdbc2Statement.java:2598)
    	at org.postgresql.core.v3.QueryExecutorImpl.processResults(QueryExecutorImpl.java:1836)
    	at org.postgresql.core.v3.QueryExecutorImpl.execute(QueryExecutorImpl.java:407)
    	at org.postgresql.jdbc2.AbstractJdbc2Statement.executeBatch(AbstractJdbc2Statement.java:2737)
    	at org.hibernate.jdbc.BatchingBatcher.doExecuteBatch(BatchingBatcher.java:70)
    	at org.hibernate.jdbc.AbstractBatcher.executeBatch(AbstractBatcher.java:268)
    	... 42 more
    Alors j'ai bien lu l'erreur, il dit qu'il n'y a pas de questionnaire avec l'id 1, sauf que ce questionnaire a été créé et enregistré dans la base juste avant... Donc normalement, l'enregistrement devrait être dans la base.
    Il est dans le contexte de persistance en tous cas car j'arrive à le récupérer et à l'afficher.
    Alors pourquoi cette erreur?
    J'ai trouvé sur le forum une autre discussion qui rapporte un problème similaire datant de 2006, mais cette discussion n'a jamais été résolue au final...

    Merci d'avance pour toute l'aide que vous pourrez m'apporter

  2. #2
    Membre éclairé
    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2008
    Messages
    379
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 40
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2008
    Messages : 379
    Par défaut
    petite précision : voici le code d'une méthode de test
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    	@Test
    	@Transactional//(propagation=Propagation.NEVER)
    	@Rollback
    	public void testFindAll() {
    		List<Question> questionsAttendus = new ArrayList<Question>();
    		questionsAttendus.add(question);
     
    		Assert.assertEquals(questionsAttendus, questionDao.findAll());
    	}
    si je décommente le (propagation=Propagation.NEVER), le test passe et il n'y a plus cette erreur de clé étrangère. J'avais mis cet attribut pour éviter un lock sur mes tables MySQL qui bloquait l'application.
    Si j'ai installé PostgreSQL c'est justement pour ne pas avoir à ajouter cet attribut...

  3. #3
    Membre éclairé
    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2008
    Messages
    379
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 40
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2008
    Messages : 379
    Par défaut
    personne n'a de piste de recherche?
    je manque cruellement d'expertise en la matière, y'a personne pour m'aider au boulot, et le problème est vraiment bloquant car si je continue sur d'autres trucs et que ça marche pas, y'a toujours un risque que le problème vienne directement de ce premier problème...

    J'ai sans doute fait plusieurs petites erreurs (car une seule grosse serait sans doute plus évidente à trouver), mais où?
    y'a-t-il des différences entre un mapping MySQL et un mapping PostgreSQL?
    à moins que ça ne soit ma manière de tester qui pose problème?
    je sais vraiment pas dans quelle direction chercher

  4. #4
    Membre émérite

    Profil pro
    Technicien
    Inscrit en
    Février 2009
    Messages
    338
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations professionnelles :
    Activité : Technicien

    Informations forums :
    Inscription : Février 2009
    Messages : 338
    Par défaut
    Bonjour,

    Une piste éventuelle pourrait être de mettre la propriété show_sql à true dans hibernate afin de voir quelles sont les requêtes SQL générées et peut être comprendre ce qui ne va pas.

    Si les requêtes ne sont pas très clair, tu peux aussi te retourner vers p6spy qui fournit le détail des instructions SQL exécutées.

    Benoit

  5. #5
    Membre éclairé
    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2008
    Messages
    379
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 40
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2008
    Messages : 379
    Par défaut
    Bonjour Benoit,

    merci de ta réponse.
    En fait, la propriété show SQL était déjà à true. J'en ai pas parlé car y'a rien qui me choquait dans les requêtes SQL. Voici les traces plus complètes dans la console :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    [...]
    INFO  - SchemaExport               - schema export complete
    INFO  - ionalTestExecutionListener - Began transaction (1): transaction manager [org.springframework.orm.jpa.JpaTransactionManager@679b2faf]; rollback [true]
     
    Hibernate: 
        select
            nextval ('hibernate_sequence')
    Hibernate: 
        insert 
        into
            Questionnaire
            (numero, publie, sexeDestinataire, titre, idQuestionnaire) 
        values
            (?, ?, ?, ?, ?)
    Hibernate: 
        select
            nextval ('hibernate_sequence')
    Hibernate: 
        insert 
        into
            Question
            (numQuestion, question, idQuestionnaire, typeReponse, idQuestion) 
        values
            (?, ?, ?, ?, ?)
    WARN  - JDBCExceptionReporter      - SQL Error: 0, SQLState: 23503
    ERROR - JDBCExceptionReporter      - L'élément du batch 0 insert into Question (numQuestion, question, idQuestionnaire, typeReponse, idQuestion) values ('1', 'question 1', '1', 'texte', '2') a été annulé. Appeler getNextException pour en connaître la cause.
    WARN  - JDBCExceptionReporter      - SQL Error: 0, SQLState: 23503
    ERROR - JDBCExceptionReporter      - ERROR: insert or update on table "question" violates foreign key constraint "fkbe5ca00676039098"
      Détail*: Key (idquestionnaire)=(1) is not present in table "questionnaire".
    ERROR - tractFlushingEventListener - Could not synchronize database state with session
    org.hibernate.exception.ConstraintViolationException: Could not execute JDBC batch update
    	at org.hibernate.exception.SQLStateConverter.convert(SQLStateConverter.java:96)
    	at org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:66)
    	at org.hibernate.jdbc.AbstractBatcher.executeBatch(AbstractBatcher.java:275)
    	at org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:262)
    	at org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:178)
    	at org.hibernate.event.def.AbstractFlushingEventListener.performExecutions(AbstractFlushingEventListener.java:321)
    	at org.hibernate.event.def.DefaultFlushEventListener.onFlush(DefaultFlushEventListener.java:51)
    	at org.hibernate.impl.SessionImpl.flush(SessionImpl.java:1206)
    	at org.hibernate.ejb.AbstractEntityManagerImpl.flush(AbstractEntityManagerImpl.java:791)
    	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
    	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    	at java.lang.reflect.Method.invoke(Method.java:597)
    	at org.springframework.orm.jpa.ExtendedEntityManagerCreator$ExtendedEntityManagerInvocationHandler.invoke(ExtendedEntityManagerCreator.java:365)
    	at $Proxy30.flush(Unknown Source)
    	at fr.statlife.protoE4N.data.dao.jpa.AbstractDaoJPAImpl.saveOne(AbstractDaoJPAImpl.java:45)
    	at fr.statlife.protoE4N.data.dao.jpa.TestQuestionDao.startTransaction(TestQuestionDao.java:52)
    	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
    	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    	at java.lang.reflect.Method.invoke(Method.java:597)
    	at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:44)
    	at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:15)
    	at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:41)
    	at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:27)
    	at org.springframework.test.context.junit4.statements.RunBeforeTestMethodCallbacks.evaluate(RunBeforeTestMethodCallbacks.java:74)
    	at org.springframework.test.context.junit4.statements.RunAfterTestMethodCallbacks.evaluate(RunAfterTestMethodCallbacks.java:82)
    	at org.springframework.test.context.junit4.statements.SpringRepeat.evaluate(SpringRepeat.java:72)
    	at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:240)
    	at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:50)
    	at org.junit.runners.ParentRunner$3.run(ParentRunner.java:193)
    	at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:52)
    	at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:191)
    	at org.junit.runners.ParentRunner.access$000(ParentRunner.java:42)
    	at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:184)
    	at org.springframework.test.context.junit4.statements.RunBeforeTestClassCallbacks.evaluate(RunBeforeTestClassCallbacks.java:61)
    	at org.springframework.test.context.junit4.statements.RunAfterTestClassCallbacks.evaluate(RunAfterTestClassCallbacks.java:70)
    	at org.junit.runners.ParentRunner.run(ParentRunner.java:236)
    	at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.run(SpringJUnit4ClassRunner.java:180)
    	at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:49)
    	at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)
    	at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:467)
    	at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:683)
    	at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:390)
    	at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:197)
    Caused by: java.sql.BatchUpdateException: L'élément du batch 0 insert into Question (numQuestion, question, idQuestionnaire, typeReponse, idQuestion) values ('1', 'question 1', '1', 'texte', '2') a été annulé. Appeler getNextException pour en connaître la cause.
    	at org.postgresql.jdbc2.AbstractJdbc2Statement$BatchResultHandler.handleError(AbstractJdbc2Statement.java:2598)
    	at org.postgresql.core.v3.QueryExecutorImpl.processResults(QueryExecutorImpl.java:1836)
    	at org.postgresql.core.v3.QueryExecutorImpl.execute(QueryExecutorImpl.java:407)
    	at org.postgresql.jdbc2.AbstractJdbc2Statement.executeBatch(AbstractJdbc2Statement.java:2737)
    	at org.hibernate.jdbc.BatchingBatcher.doExecuteBatch(BatchingBatcher.java:70)
    	at org.hibernate.jdbc.AbstractBatcher.executeBatch(AbstractBatcher.java:268)
    	... 42 more
    INFO  - ionalTestExecutionListener - Rolled back transaction after test execution for test context [[TestContext@57398cac testClass = TestQuestionDao, locations = array<String>['classpath:/fr/statlife/protoE4N/data/dao/jpa/TestDao-context.xml'], testInstance = fr.statlife.protoE4N.data.dao.jpa.TestQuestionDao@3429cf1, testMethod = testFindAll@TestQuestionDao, testException = javax.persistence.PersistenceException: org.hibernate.exception.ConstraintViolationException: Could not execute JDBC batch update]]
    on voit que les requêtes sont dans le bon ordre, il insert d'abord le questionnaire avant d'essayer d'insérer la question. ça ne rend le problème que plus incompréhensible pour moi en fait...

  6. #6
    Membre émérite

    Profil pro
    Technicien
    Inscrit en
    Février 2009
    Messages
    338
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations professionnelles :
    Activité : Technicien

    Informations forums :
    Inscription : Février 2009
    Messages : 338
    Par défaut
    Ok. Du coup je te conseille d'installer p6spy entre hibernate et le sgdb.

    Il te fournira, en plus des requêtes SQL, le retour d'exécution et les valeurs assignées.
    Je pense qu'avec le détail l'erreur paraitra évidente.

    Benoit

  7. #7
    Membre éclairé
    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2008
    Messages
    379
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 40
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2008
    Messages : 379
    Par défaut
    ok, merci pour la piste.
    je vais tester ça de ce pas

  8. #8
    Membre éclairé
    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2008
    Messages
    379
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 40
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2008
    Messages : 379
    Par défaut
    Re-EDIT : en fait si, les requêtes insert apparaissent bien dans les log au moment du breakpoint, c'est juste que le fichier avait pas du bien être rechargé la première fois que j'ai checké...
    Par contre, toujours rien en base

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Problèmes lecture/écriture bytea avec Postgresql
    Par Aldouille dans le forum JDBC
    Réponses: 2
    Dernier message: 15/03/2018, 12h51
  2. Problème de requête en PHP avec postgreSQL
    Par Kira07 dans le forum PostgreSQL
    Réponses: 2
    Dernier message: 29/05/2007, 22h52
  3. Réponses: 3
    Dernier message: 11/12/2006, 19h57
  4. [PostgreSQL] [PostgreSQL] Problème de syntaxe (NULL) avec PHP et Postgresql
    Par el_butcho dans le forum PHP & Base de données
    Réponses: 40
    Dernier message: 16/07/2006, 18h28
  5. Problème de login avec Postgresql
    Par maddog2032 dans le forum PostgreSQL
    Réponses: 5
    Dernier message: 27/04/2005, 13h19

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo