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 :

[iBatis] gestion clé étrangères


Sujet :

Persistance des données Java

  1. #1
    Membre à l'essai
    Profil pro
    Étudiant
    Inscrit en
    Février 2009
    Messages
    18
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2009
    Messages : 18
    Points : 20
    Points
    20
    Par défaut [iBatis] gestion clé étrangères
    Bonjour à tous,

    J'ai commencé un projet sous Spring Mvc avec comme couche de persistance IBatis. Je me suis appuyer sur les tutos de Serge Tahé.

    Je vous explique mon problème qui dure depuis quelque jours.

    Voici mon MLD


    la 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
    66
    67
     
    public class User {
     
    	//Variables
    	private String username, password;
    	private int idUser;
    	private Category category;
     
    	//Constructors
    	public User() {};
     
    	public User(int idUser, String username, String password){
    		setIdUser(idUser);
    		setUsername(username);
    		setPassword(password);
    	}
     
    	public User(String username, String password)
    	{
    		setUsername(username);
    		setPassword(password);
    	}
     
    	public User(User user) {
    		setUsername(user.getUsername());
    		setPassword(user.getPassword());
    		setIdUser(user.getIdUser());
    	}
     
    	//Setters & Getters
    	public void setIdUser(int idUser) {
    		this.idUser=idUser;
    	}
     
    	public int getIdUser() {
    		return idUser;
    	}
     
    	public void setUsername(String username) {
    		this.username=username;
    	}
     
    	public String getUsername() {
    		return username;
    	}
     
    	public void setPassword(String password) {
    		this.password=password;
    	}
     
    	public String getPassword() {
    		return password;
    	}
     
    	public void setCategory(Category category) {
    		this.category=category;
    	}
     
    	public Category getCategory() {
    		return category;
    	}
     
    	//String representation of the User object
    	public String toString() {
    		return "["+idUser+","+category.getIdCategory()+","+username+","+password+"]";
    	}
    }
    la classe Category
    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
     
    import java.util.List;
     
    public class Category {
     
    	//Variables
    	private int idCategory;
    	private String nameCategory;
    	private List<User> user;
     
    	//Contructors
    	public Category() {};
     
    	public Category(int idCategory,String nameCategory) {
    		setIdCategory(idCategory);
    		setNameCategory(nameCategory);
    	}
     
    	public Category(Category category) {
    		setIdCategory(getIdCategory());
    		setNameCategory(getNameCategory());
    	}
     
    	//Setters & Getters
    	public void setIdCategory(int idCategory) {
    		this.idCategory=idCategory;
    	}
     
    	public int getIdCategory() {
    		return idCategory;
    	}
     
    	public void setNameCategory(String nameCategory) {
    		this.nameCategory=nameCategory;
    	}
     
    	public String getNameCategory() {
    		return nameCategory;
    	}
     
    	public void setListUser(List<User> user) {
    		this.user=user;
    	}
     
    	public List<User> getListUser() {
    		return user;
    	}
     
    	//String representation of the Category object
    	public String toString() {
    		return "["+idCategory+","+nameCategory+"]";
    	}
    }
    Le fichier client-mysql.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
    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
    <?xml version="1.0" encoding="UTF-8" ?>
    <!DOCTYPE sqlMap PUBLIC "-//iBATIS.com//DTD SQL Map 2.0//EN" "http://www.ibatis.com/dtd/sql-map-2.dtd">
    
    <sqlMap>
    <!-- Alias class -->	
    	<typeAlias alias="UserClass" type="be.***.webapp.domain.model.User"/>
    	<typeAlias alias="CategoryClass" type="be.***.webapp.domain.model.Category"/>
    	
    <!-- Mapping table -->
    	<!-- table [USER] -->
    	<resultMap id="UserTable" class="UserClass">
    		<result property="idUser" column="IDUSER"/>
    		<result property="username" column="USERNAME"/>
    		<result property="password" column="PASSWORD"/>
    	</resultMap>
    	
    	<!-- table [CATEGORY] -->
    	<resultMap id="" class="CategoryClass">
    		<result property="idCategory" column="IDCATEGORY"/>
    		<result property="nameCategory" column="NAMECATEGORY"/>
    	</resultMap>
    	
    	<resultMap id="resultDetail" class="UserClass" extends="UserTable">
    		<result property="CategoryTable.idCategory" column="IDCATEGORY"/>
    		<result property="CategoryTable.nameCategory" column="NAMECATEGORY"/>
    	</resultMap>
    	
    <!-- Request -->
    	<!-- obtenir un user en particulier -->
    	<select id="User.getOne" resultMap="User.map" >
    		select * FROM USER WHERE username like #username# and password like #password#
    	</select>
    	
    	<!-- ajouter un user -->
    	<insert id="User.insertOne" >
    		insert into	USER (USERNAME,PASSWORD) VALUES (#username#,#password#) 
    		<selectKey keyProperty="idUser">
    			select LAST_INSERT_ID() as value
    		</selectKey> 		
    	</insert>
    	
    	<!-- mettre à jour un user -->
    	<update id="User.updateOne" > 
    		update USER set USERNAME=#username#,PASSWORD=#password# WHERE ID=#idUser#
    	</update>
    </sqlMap>
    Mon problème est que je ne sais pas comment dire à iBatis qu'il existe des clés étrangères car j'ai essayé en me basant sur des exemples sur divers forum (code écrit en rouge dans le fichier client-mysql.xml) mais cela ne fonctionne pas

    Ce que je cherche à faire faire une requête pour afficher un enregistrement à partir d'un nom d'utilisateur et d'un mot de passe et des que j'obtiens cet enregistrement faire déterminer l'accès de l'utilisateur a partir d'un user.getIdCategory();
    Évidemment, j'obtiens un nullPointerException

    Erreur sur la console
    There is no WRITEABLE property named 'idCategory' in class 'be.***.webapp.domain.model.User

    Est ce que quelqu'un pourrait m'aiguiller sur la démarche à suivre car je suis vraiment perdu et d'autant plus que je dois remettre ce projet dans 10jours

  2. #2
    Membre expérimenté
    Avatar de Patriarch24
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Septembre 2003
    Messages
    1 047
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

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

    Informations forums :
    Inscription : Septembre 2003
    Messages : 1 047
    Points : 1 640
    Points
    1 640
    Par défaut
    There is no WRITEABLE property named 'idCategory' in class 'be.***.webapp.domain.model.User
    C'est clair non ? Tu n'as pas de méthode setIdCategory dans ta classe User. Tu as cependant un setCategory. Je regarderais de ce côté là.
    En premier lieu, utilisez un moteur de recherche.
    En second lieu, postez sur le forum adéquat !

Discussions similaires

  1. [MySQL] Gestion clé étrangère et jointure
    Par Ysu89 dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 27/10/2009, 15h14
  2. [Ibatis] Gestion des tableaux
    Par nonolerobot77 dans le forum Persistance des données
    Réponses: 0
    Dernier message: 13/08/2008, 18h32
  3. [Ibatis] Gestion de Transaction
    Par langar dans le forum Persistance des données
    Réponses: 1
    Dernier message: 06/03/2008, 18h23
  4. Gestion clé étrangère
    Par Seth77 dans le forum Access
    Réponses: 5
    Dernier message: 08/09/2006, 18h37
  5. Gestion des clés étrangères
    Par Gonelle dans le forum HyperFileSQL
    Réponses: 1
    Dernier message: 06/07/2006, 10h48

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