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

Persistance des données Java Discussion :

hibernate, flush ne faisant pas d'insert..


Sujet :

Persistance des données Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    89
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 89
    Par défaut hibernate, flush ne faisant pas d'insert..
    Bonjour à tous,

    je suis en train de jouer un peu avec hibernate (newbie total!) et vaadin (idem) et j'ai un pb d'insertion qui... ne flush pas... un peu paumé sur cette affaire...

    L'histoire :

    J'execute l'affaire (serveur Glassfish), aucune exception remontée... mon objet contient les bonnes info (avec un id de setté, qui s'incremente automatiquement côté MySql (5.poussières). Seul pb aucune création côté base... le plus marrant je crée des enregistrements manuellement par la console mysql, je relance l'appli et celle-ci met correctement à jour l'id de mon objet en fonction de l'id max de la base!!!! sans me créer d'enregistrement, et toujours aucune exception... , je sais que j'ai ratté un truc, mais j'arrive pas à mettre le doigt dessus... (de ce que j'ai compris pour mon mapping objet à partir du moment ou j'implémente celui-ci dans ma classe je peux me passer de l'xml de mappage, ce que je préfère cela me permet de limiter et centraliser tout ça, je me trompe???)

    une idée de l'origine?, du truc qui manque, une piste... un encouragement... juste un petit signe, svp,..

    Mon code :

    ma classe de mapping :

    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
     
    @javax.persistence.Entity
    @javax.persistence.Table (name="utilisateur", schema="gameMode")
    public class Utilisateur {
    	@Id
    	@GeneratedValue(strategy=GenerationType.AUTO)
    	@Column(name="id")
    	private Integer id;
    	public Integer getId() {return id;}
    	public void setId(Integer id) {this.id = id;}
    	@Column(name="name")
    	private String name;
    	public String getName() {return name;}
    	public void setName(String name) {this.name = name;}
    	@Column(name="password")
    	private String password;
    	public String getPassword() {return password;}
    	public void setPassword(String password) {this.password = password;}
    	@Column(name="roleId")
    	private Integer roleId;
    	public Integer getRoleId() {return roleId;}
    	public void setRoleId(Integer roleId) {this.roleId = roleId;}
     
    	/* Methode de class */
    	public String toString(){
    		return "nom : "+this.name+", id : "+this.id;
    	}
     
    }
    ma zone de jeu :

    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
     
    final Window mainWindow = new Window("play with vaadin/hibernate");
     
    		Label label = new Label("Hi man!");
    		mainWindow.addComponent(label);
     
    		Ejb3Configuration cfg = new Ejb3Configuration();
    		EntityManagerFactory emf = cfg.configure("hibernate.cfg.xml")
    			.addAnnotatedClass(Utilisateur.class)
    			.buildEntityManagerFactory();
     
    		EntityManager em = emf.createEntityManager();
    		EntityTransaction tx = null;
     
    		try {
    			tx = em.getTransaction();
    			tx.begin();
    		} catch (Exception exc) {
    			if ( tx != null && tx.isActive() ) tx.rollback();
    			Label exception1 = new Label(exc.toString());
    			mainWindow.addComponent(exception1);
    		}
     
    		//SessionFactory sessions = cfg.buildSessionFactory();
    		//Session session = sessions.openSession();
     
    		Utilisateur user = new Utilisateur();
    		user.setName("Test");
    		user.setPassword("test");
    		user.setRoleId(0);
     
    		try{
    			em.persist(user);
    			em.flush();
     
    			//correction temporaire rendant le tout fonctionnel
    			//attention : non finalisé, code à considérer comme instable et non bordé
    			tx.commit();
     
    			em.refresh(user);
    			//session.beginTransaction();
    			//session.save(user);
    			//session.getTransaction().commit();
    			//session.flush();
    			//session.close();
    		}
    		catch(Exception exc){
    			Label exception2 = new Label(exc.toString());
    			mainWindow.addComponent(exception2);
    		}
    		finally{
    			em.close();
    		}
     
    		Label newUser = new Label(user.toString());
    		mainWindow.addComponent(newUser);
    		Label test = new Label("test");
    		mainWindow.addComponent(test);
    		setMainWindow(mainWindow);
    et mon hibernate.cfg.xml

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    <hibernate-configuration>
     <session-factory name="sessionFactory">
      <property name="hibernate.connection.driver_class">org.gjt.mm.mysql.Driver</property>
      <property name="hibernate.connection.url">jdbc:mysql://127.0.0.1/gameMode</property>
      <property name="hibernate.connection.username">root</property>
      <property name="hibernate.default_schema">gameMode</property>
      <property name="hibernate.dialect">org.hibernate.dialect.MySQLInnoDBDialect</property>
      <mapping class="com.example.gameMode.Utilisateur"/>
     </session-factory>
    </hibernate-configuration>
    je précise : pas de mot de passe à mon root mysql, j'suis comme ça! à la cool!

  2. #2
    Membre émérite Avatar de noOneIsInnocent
    Homme Profil pro
    Inscrit en
    Mai 2002
    Messages
    1 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2002
    Messages : 1 037
    Par défaut
    Bonjour

    je ne sais pas si vous avez résolu votre problème mais en tout cas je vois que vous commencez une transaction,que vous ne la commitez pas et que vous ne la fermez pas...

    Essayer de regarder dans ce sens là

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    89
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 89
    Par défaut
    Bonjour,

    Un grand merci pour votre réponse, vous avez mis le doigt pile sur le problème. je n'avais pas eu le temps de repasser dessus, ayant été pris par d'autres choses plus prioritaires, mais ça m'a permis de débloquer le tout en 30s!

    En fait, je m'emmele un peu les pédales entre l'entityManager et l'EntityTransaction et je crois que les roles respectifs de la méthode flush du manager et le commit de la transaction ne sont pas encore très clair pour moi...

    je vais essayer de clarifier tout ça et je reposterais un code nettoyé et commenté, il sera peut être utile à d'autre.

    En tout cas, merci.

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    89
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 89
    Par défaut Complément
    juste pour compléter, en fait j'étais passé à côté de ça : Persistance Java 5, Serge Tahe, une petite perle. beaucoup plus clair que le man d'hibernate et autre wiki trainant sur le net, un grand merci a Mr Tahe

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 28/04/2008, 23h43
  2. Requête hibernate qui ne fonctionne pas
    Par sheura dans le forum Hibernate
    Réponses: 4
    Dernier message: 28/09/2007, 16h20
  3. Réponses: 2
    Dernier message: 16/05/2007, 09h26
  4. [Merge] Pas d'insertion
    Par VinceTlse dans le forum Oracle
    Réponses: 7
    Dernier message: 27/02/2007, 15h49
  5. [web] [Perl/Tk] Pas d'insertion de texte !
    Par GLDavid dans le forum Interfaces Graphiques
    Réponses: 2
    Dernier message: 08/07/2004, 22h00

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