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

JPA Java Discussion :

Eclipselink.ddl-generation : drop-and-create-tables ne fait pas de drop


Sujet :

JPA Java

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 2
    Par défaut Eclipselink.ddl-generation : drop-and-create-tables ne fait pas de drop
    Bonjour,

    En tentant d'implémenter une couche de persistance, je me retrouve bloqué pour une raison qui m'échappe totalement.

    J'utilise Eclipselink 2.3.0 et tente d'écrire sur une base MySQL (le problème se pose aussi sous Derby, donc a priori la base n'a rien à voir là-dedans), en utilisant, au moins pour les tests, la propriété drop-and-create-tables d'eclipselink.

    Mais voilà, cela fonctionne une fois, puis ensuite, plante régulièrement en renvoyant un erreur de ce type :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    [EL Warning]: 2011-07-02 15:11:32.669--ServerSession(31248093)--Exception [EclipseLink-4002] (Eclipse Persistence Services - 2.3.0.v20110604-r9504): org.eclipse.persistence.exceptions.DatabaseException
    Internal Exception: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Table 'PROJECT' already exists
    Error Code: 1050
    Call: CREATE TABLE PROJECT ...
    J'ai pensé à un problème de cache, j'ai cherché et trouvé plusieurs choses type :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <shared-cache-mode>NONE</shared-cache-mode>
    Et autres variantes que j'ai mises dans mon persistence.xml, sans succès. Les tests passent une fois de temps en temps, de façon plus ou moins erratique, ou en tout cas sans que j'aie pu déterminer une raison valable. Par exemple, il peut passer alors que je viens de rajouter la balise shared-cache-mode, pour planter au second passage, ou au contraire repasser alors que je viens de modifier légèrement le persistence.xml (un ou deux sauts de ligne par exemple). Mais à l'inverse, la répétition de ces mêmes modifications peuvent aussi mener à l'échec.

    Ce problème ne s'était je crois jamais posé avant que je passe d'Eclipselink 1.1.0 à Eclipselink 2.3.0. J'ai essayé avec les autres versions d'Eclipselink 2, sans plus de succès.

    Voilà mon persistence.xml :

    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
    <?xml version="1.0" encoding="UTF-8"?>
    <persistence version="2.0" xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd">
    	<persistence-unit name="azerty" transaction-type="RESOURCE_LOCAL">
    		<shared-cache-mode>NONE</shared-cache-mode>
    		<provider>org.eclipse.persistence.jpa.PersistenceProvider</provider>
     		<class>...</class>
    		<properties>
    			<property name="eclipselink.target-database" value="MYSQL" />
    			<property name="javax.persistence.jdbc.driver" value="com.mysql.jdbc.Driver" />
    			<property name="javax.persistence.jdbc.url" value="jdbc:mysql://azerty.net:3306/azerty_test" />
    			<property name="javax.persistence.jdbc.user" value="azerty_test" />
    			<property name="javax.persistence.jdbc.password" value="password" />
    			<property name="eclipselink.ddl-generation" value="drop-and-create-tables" />
    			<property name="eclipselink.ddl-generation.output-mode" value="both" />
    			<property name="eclipselink.logging.level" value="FINE" />
    		</properties>
    	</persistence-unit>
    </persistence>
    Je suis prêt à tester toutes les solutions proposées, parce que je commence à sécher un peu...

    Merci de vos propositions.

  2. #2
    Membre expérimenté
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    127
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 127
    Par défaut
    Bonjour,

    Première remarque : tu dis "plante régulièrement en envoyant un message de ce type.."
    Ce que je vois dans le log n'est pas un plantage mais une trace "Warning" d'exception déclenchée : il ne s'agit donc pas d'une erreur fatale.
    Ma première question est donc : est-ce que la base est bien modifiée et ce que ton programme doit faire est-il fait ?
    Question subsidiaire : si tu modifie un record "à la main", est-ce qu'il a bien été remplacé par le bon lorsque tu relance le test ?
    Pour info, j'ai moi même un petit jeu de test dans lequel j'utilise la version 2.0.0 d'eclipse link et le seul message que j'ai, c'est un message du même type mais avec ma table de clé primaire (j'ai utilisé un TableGenerator pour gérer mes clés primaires dans les classes plutôt qu'une séquence (qui ne fonctionnait pas dans mes tests mysql) et même les autoincrement dont je ne suis pas fan).
    Mais ce message, comme le tiens n'est qu'un Warning, et j'ai pu vérifier que les données de cette table de clés sont ben réinitialisées et que les enregistrements de mes tables ont bien remplacés ceux qui étaient présents avant le premier test.
    Donc, vérifie bien ces éléments, mas j'ai l'impression que tu te fais du soucis pour pas grand chose, même si un puriste n'aime pas trop voir des "Warning" das les traces !
    J'ai une troisième question, c'est : comment gère tu les ID ? par défaut, AUTO, SEQUENCE, IDENTITY ou TABLE (moi, c'est ce dernier que j'utilise et qui marche pareil avec des bases comme MySql, Derby ou Oracle 11g)

    Par contre, n'ayant jamais utilisé la version 1.1.0 d'eclipselink, je ne peux pas comparer.

    Cordialement

Discussions similaires

  1. EasyPHP / phpMyAdmin : CREATE TABLE ne marche pas
    Par wilfryjules dans le forum Requêtes
    Réponses: 2
    Dernier message: 17/10/2014, 16h29
  2. CREATE TABLE AS ou pas ? telle est ma question
    Par davly dans le forum Requêtes
    Réponses: 5
    Dernier message: 21/09/2011, 14h26
  3. Drop Table ; Create Table
    Par monoar dans le forum Ruby on Rails
    Réponses: 2
    Dernier message: 23/07/2007, 14h57
  4. drop avant create table ?
    Par ]matmat[ dans le forum SQL
    Réponses: 5
    Dernier message: 28/08/2006, 21h27
  5. create table ne passe pas
    Par artotal dans le forum Requêtes
    Réponses: 3
    Dernier message: 13/06/2006, 16h54

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