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
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
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+"]"; } }
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
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+"]"; } }
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
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>
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
Partager