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 :

requête puis insert


Sujet :

Hibernate Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Avatar de natoine
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    Décembre 2007
    Messages
    393
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Chercheur en informatique

    Informations forums :
    Inscription : Décembre 2007
    Messages : 393
    Par défaut requête puis insert
    Je comprends pas.
    J'ai un objet PostType dont l'un des attributs est un objet User.
    Les deux sont persistants en base.
    Je veux récupérer l'un des User en base pour l'utiliser comme attribut de PostType.
    Je fais :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    EntityManagerFactory emf = Persistence.createEntityManagerFactory("portletsAnnotation");
    EntityManager em = emf.createEntityManager();
    EntityTransaction tx = em.getTransaction();
    tx.begin();
    List users = em.createQuery("from User where login = 'admin'").getResultList();
    User _admin = (User)users.get(0);
    PostType _comment = new PostType();
    _comment.setCreator(_admin);
    em.persist(_comment);
    tx.commit();
    Et j'ai une erreur :
    [AssertionFailure] an assertion failure occured (this may indicate a bug in Hibernate, but is more likely due to unsafe use of the session)
    org.hibernate.AssertionFailure: null id in fr.natoine.user_persistence.User entry (don't flush the Session after an exception occurs)
    www.natoine.fr
    natoine.developpez.com
    Principalement du Java avec un soupçon de réseaux sociaux.

  2. #2
    Membre éclairé
    Avatar de natoine
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    Décembre 2007
    Messages
    393
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Chercheur en informatique

    Informations forums :
    Inscription : Décembre 2007
    Messages : 393
    Par défaut
    Je copie colle le code de la méthode init() de mon portlet pour que vous voyiez bien que c'est sale.
    Je pense qu'il doit y avoir moyen de créer un EntityManager par session mais je ne sais pas comment faire.
    Et j'aimerai ne créer les objets User guest et admin que si ils n'existent pas.
    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
    86
    87
    88
    public void init()
    	{
    		System.out.println("[CreateAnnotationPortlet.init]");
    		//vérification de l'existence des utilisateurs par défaut : guest et admin
    		//Créer l'utilisateur Guest
    		EntityManagerFactory emf = Persistence.createEntityManagerFactory("portletsAnnotation");
    		EntityManager em = emf.createEntityManager();
            EntityTransaction tx = em.getTransaction();
            tx.begin();
            try
            {
            	User _guest = new User();
            	_guest.setContext_inscription("CreateAnnotationPortlet.init");
            	_guest.setInscription(new Date());
            	_guest.setLogin("guest");
            	_guest.setMail("guest@gmail.com");
            	em.persist(_guest);
            	tx.commit();
            	tx.begin();
            }
            catch(Exception e)
            {
            	 System.out.println( "[CreateAnnotationPortlet.init] unable to persist guest user" );
            	 System.out.println(e.getMessage());
            }
            //Créer l'utilisateur admin
            try
            {	
            	User _admin = new User();
            	_admin.setContext_inscription("CreateAnnotationPortlet.init");
            	_admin.setInscription(new Date());
            	_admin.setLogin("admin");
            	_admin.setMail("admin@gmail.com");
            	em.persist(_admin);
            	tx.commit();
            	tx.begin();
            }
            catch(Exception e)
            {
            	System.out.println( "[CreateAnnotationPortlet.init] unable to persist admin user" );
            	System.out.println(e.getMessage());
            }
            //Créer le type de Posts Comment
            try
            {	
            	//récupérer l'admin :
            	List users = em.createQuery("from User where login = 'admin'").getResultList();
                User _admin = (User)users.get(0);
                System.out.println("[CreateAnnotationPortlet.init] trying to create comment posttype, admin has id n°" + _admin.getId());
            	PostType _comment = new PostType();
            	_comment.setContext("CreateAnnotationPortlet.init");
            	_comment.setCreation_date(new Date());
            	_comment.setCreator(_admin);
            	_comment.setDescription("permet de laisser de simples commentaires");
            	_comment.setLabel("commentaires");
            	em.persist(_comment);
            	tx.commit();
            	tx.begin();
            }
            catch(Exception e)
            {
            	System.out.println( "[CreateAnnotationPortlet.init] unable to persist comment postType" );
            	System.out.println(e.getMessage());
            }
            //Créer le type de Posts Tag
            try
            {	
            	PostType _tag = new PostType();
            	_tag.setContext("CreateAnnotationPortlet.init");
            	_tag.setCreation_date(new Date());
            	//récupérer l'admin :
            	List users = em.createQuery("from User where login = 'admin'").getResultList();
                User _admin = (User)users.get(0);
            	_tag.setCreator(_admin);
            	_tag.setDescription("permet de laisser de simples tags");
            	_tag.setLabel("tags");
            	em.persist(_tag);
            	tx.commit();
            }
            catch(Exception e)
            {
            	System.out.println( "[CreateAnnotationPortlet.init] unable to persist tag postType" );
            	System.out.println(e.getMessage());
            }
            // Shutting down the application
            em.close();
            emf.close();
    	}
    Le code de ma classe User :
    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
    package fr.natoine.user_persistence;
     
    import java.io.Serializable;
    import java.util.Date;
     
    import javax.persistence.Column;
    import javax.persistence.Entity;
    import javax.persistence.GeneratedValue;
    import javax.persistence.Id;
    import javax.persistence.Table;
    import javax.xml.bind.annotation.XmlRootElement;
     
    @XmlRootElement
    @Entity
    @Table(name = "USER")
    public class User implements Serializable
    {
    	@Id @GeneratedValue
        @Column(name = "USER_ID")
    	private Long id;
    	@Column(name = "USER_LOGIN" , unique=true, nullable=false)
    	private String login;
    	@Column(name = "USER_MAIL" , nullable=false)
    	private String mail;
    	@Column(name = "USER_DATE_INSCRIPTION")
    	private Date inscription;
    	@Column(name = "USER_CONTEXT_INSCRIPTION")
    	private String context_inscription;
    	@Column(name = "USER_PASSWORD")
    	private String password;
    	public String getLogin() {
    		return login;
    	}
    	public void setLogin(String login) 
    	{
    		this.login = login;
    	}
    	public String getMail() {
    		return mail;
    	}
    	public void setMail(String mail) {
    		this.mail = mail;
    	}
    	public Date getInscription() {
    		return inscription;
    	}
    	public void setInscription(Date inscription) {
    		this.inscription = inscription;
    	}
    	public String getContext_inscription() {
    		return context_inscription;
    	}
    	public void setContext_inscription(String contextInscription) {
    		context_inscription = contextInscription;
    	}
    	public String getPassword() {
    		return password;
    	}
    	public void setPassword(String password) {
    		this.password = password;
    	}
    	public Long getId() {
    		return id;
    	}
    }
    www.natoine.fr
    natoine.developpez.com
    Principalement du Java avec un soupçon de réseaux sociaux.

Discussions similaires

  1. Requête d'insertion dans une base ACCESS
    Par kurul1 dans le forum C++Builder
    Réponses: 5
    Dernier message: 02/11/2006, 17h41
  2. [C#] pb de requête d'insertion
    Par leycho dans le forum Windows Forms
    Réponses: 2
    Dernier message: 18/04/2006, 10h07
  3. [Requête] Problème INSERT INTO
    Par lerico dans le forum Requêtes et SQL.
    Réponses: 22
    Dernier message: 10/01/2006, 17h12
  4. Optimisation d'une requête d'insertion
    Par fdraven dans le forum Oracle
    Réponses: 15
    Dernier message: 01/12/2005, 14h00
  5. Requête d'insertion multiple avec 1 valeur fixe
    Par [DreaMs] dans le forum Langage SQL
    Réponses: 2
    Dernier message: 01/12/2005, 09h28

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