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 :

EntityManager.find() retourne entity avec tous les attributs à null


Sujet :

JPA Java

  1. #1
    Membre éclairé
    Avatar de ZouBi
    Inscrit en
    Octobre 2007
    Messages
    508
    Détails du profil
    Informations professionnelles :
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Octobre 2007
    Messages : 508
    Points : 812
    Points
    812
    Par défaut EntityManager.find() retourne entity avec tous les attributs à null
    Bonjour,
    Je suis en ce moment sur le développement d'une application Java utilisant la technologie des JPA et Bean.

    Je possède une entity 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
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    package com.coucou.entity;
     
    import java.io.Serializable;
    import java.lang.String;
    import java.util.Collection;
     
    import javax.persistence.*;
    import javax.validation.constraints.*;
     
    import com.coucou.utils.Cryptography;
     
    @Entity
    @Table(name = "User")
    public class User implements Serializable {
    	private static final int KEY_LENGTH = 30;
     
    	@Id
    	@GeneratedValue
    	private int id;
    	@Column(nullable = false, unique = true, length = 64)
    	@NotNull
    	@Size(min = 3, max = 64)
    	private String username;
    	@Column(nullable = false, length = 32)
    	@NotNull
    	@Size(max = 32)
    	private String passwd;
    	@Column(unique = true, nullable = false, length = 64)
    	@NotNull
    	@Size(max = 64)
    	private String clientKey;
    	@Column(unique = true, nullable = false, length = 64)
    	@NotNull
    	@Size(max = 64)
    	private String serverKey;
    	@OneToMany(mappedBy = "user", cascade = CascadeType.ALL, fetch = FetchType.LAZY, orphanRemoval= true)
    	private Collection<Category> categories;
    	private static final long serialVersionUID = 1L;
     
    	public User() {
    		super();
     
    		clientKey = Cryptography.generateKey(KEY_LENGTH);
    		serverKey = Cryptography.generateKey(KEY_LENGTH);
    	}   
     
    	public int getId() {
    		return this.id;
    	}
     
    	public void setId(int id) {
    		this.id = id;
    	}   
     
    	public String getUsername() {
    		return this.username;
    	}
     
    	public void setUsername(String username) {
    		this.username = username;
    	}   
     
    	public String getPasswd() {
    		return this.passwd;
    	}
     
    	public void setPasswd(String passwd) {
    		this.passwd = passwd;
    	}   
     
    	public String getClientKey() {
    		return this.clientKey;
    	}
     
    	public String getServerKey() {
    		return this.serverKey;
    	}
     
    	public Collection<Category> getCategories() {
    		return this.categories;
    	}
     
    	public void setCategories(Collection<Category> categories) {
    		this.categories = categories;
    	}
    }
    Une remote bean avec la fonction getUser() :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    @Stateless(mappedName = "ejb/stateless/User")
    @TransactionAttribute(value = TransactionAttributeType.REQUIRED)
    public class UserBean implements UserLocal, UserRemote {
    	@PersistenceContext(unitName = "coucouPU")
    	private EntityManager em;
     
    	@Override
    	public User getUser(int id) {
    		return em.find(User.class, id);
    	}
    }
    Tout est simple. Mais lorsque j'appelle cette fonction depuis une application cliente remote, elle me renvoie bien une instance User quand je lui passe une bonne id mais tous ses attributs sont des pointeurs null.
    Ainsi toutes les manipulations sur son username, password... me feront des NullPointerException.
    Exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    user.getUsername().equals("...");
    J'ai beau cherché, je ne comprends pas pourquoi il ne m'initialise pas les attributs par les valeurs se trouvant dans la table. Mon entity est pourtant Serializable. Une idée?

  2. #2
    Membre éclairé
    Avatar de ZouBi
    Inscrit en
    Octobre 2007
    Messages
    508
    Détails du profil
    Informations professionnelles :
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Octobre 2007
    Messages : 508
    Points : 812
    Points
    812
    Par défaut
    J'ai continué à creuser mais rien y fait.
    Je ne pense pas que c'est lié au code mais à la configuration.
    Pour mes tests, je suis sous Windows avec serveur Glassfish et Mysql (avec EasyPHP).
    Quelqu'un saurait quels genres de soucis liés à la configuration peuvent mener à ce résultat?


    EDIT :
    J'ai eu beau chercher, je n'ai réussi à résoudre mon problème que d'une seule manière : j'ai remplacé EclipseLink par Hibernate, et ça fonctionne niquelle.
    Bug qui n'est pas réellement résolu mais contourné. Il est possible que ça vient du fait qu'EclipseLink ne gère pas MySQL 5.
    Bref, désolé à l'équipe d'EclipseLink de vous lacher !

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

Discussions similaires

  1. [XSLT 2.0] Comparer la valeur d'un attribut avec tous les autres
    Par VforVincent dans le forum XSL/XSLT/XPATH
    Réponses: 4
    Dernier message: 02/09/2011, 17h26
  2. [Forum] Des erreurs avec tous les scripts PHP
    Par sensoo dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 12
    Dernier message: 25/04/2006, 18h41
  3. état avec tous les enregistrements d'un formulaire
    Par Arkalys dans le forum Access
    Réponses: 9
    Dernier message: 30/09/2005, 11h45
  4. Réponses: 7
    Dernier message: 08/01/2005, 13h24
  5. creation d'utilisateur sous interbase avec tous les droits
    Par devalender dans le forum InterBase
    Réponses: 2
    Dernier message: 13/09/2004, 10h00

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