Problème d'écriture en base de données
Bonjour.
Je fais une appli web en JEE en utilisant Hibernate pour la persistance des données.
En simplifiant les chose, j'ai une classe "Users" :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| @Entity@Table(name = "users", catalog = "expense_report")
public class Users implements java.io.Serializable {
private int idUser;
private String userName;
private String userFirstName;
private String userEmail;
private Boolean userIsactif;
private Integer userInternalId;
private String userCarName;
private String userPhone;
private String passWord;
private Coefficients coeffocient;
private Fonctions fonction;
// Constructeur, Getter, Setter |
et une classe "Fonction" :
Code:
1 2 3 4 5 6 7 8 9
| @Entity@Table(name = "fonctions", catalog = "expense_report")
public class Fonctions implements java.io.Serializable {
private int idFonction;
private String fonctionName;
private Set<Users> users;
// Constructeur, Getter, Setter |
J'ai donc bien sur deux tables en base de données pour ces deux classes.
Dans ma table "Users", j'ai un FK qui correspond à la PK de la table fonction.
Normalement, jusque la tout est OK.
Bien sur, j'ai un formulaire dans lequel j'ajoute un utilisateur à mon application.
Et le problème, est ici.
Pour attribuer une "Fonction" à mon "User", j'utilise une <select> (logique).
Quand je submit mon formulaire, toutes les infos sont bien remonté dans ma classe d'action mais la fonction de l'utilisateur n'est pas renseignée.
Mon HTML (j'utilise Struts2)
Code:
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
| <form method="POST" action="AddUser"> <div class="form_user col-md-12">
<div class="col-md-6">
<div class="form-group">
<label for="userInternalId">Matricule</label>
<input type="number" class="form-control" id="userInternalId" name="user.userInternalId" placeholder="Matricule">
</div>
<div class="form-group">
<label for="userFonction">Fonction</label>
<s:if test="%{ fonctions == null }">
<select class="form-control" id="selectFonction">
<option>Veuillez créer des fonctions utilisateur</option>
</select>
</s:if>
<s:else>
<s:select class = "form-control" id = "fonctions" list = "fonctions" listKey = "idFunction" listValue="fonctionName" headerKey="-1" headerValue="Selectionnez la fonction de l'utilisateur" name="fonction.idFonction"></s:select>
</s:else>
</div>
<div class="form-group">
<label for="userName">Nom</label>
<input type="text" class="form-control" id="userName" name="user.userName" placeholder="Nom">
</div>
<div class="form-group">
<label for="userFirstName">Prénom</label>
<input type="text" class="form-control" id="userFirstName" name="user.userFirstName" placeholder="Prénom">
</div>
<div class="form-group">
<label for="userEmail">Adresse e-mail</label>
<input type="email" class="form-control" id="userEmail" name="user.userEmail" aria-describedby="emailHelp" placeholder="e-mail">
</div>
<div class="form-group">
<label for="userPhone">Téléphone</label>
<input type="text" class="form-control" id="userPhone" name="user.userPhone" placeholder="Téléphone">
</div>
</div>
<div class="col-md-6">
<div class="form-group">
<label for="userCarName">Véhicule utilisé</label>
<input type="text" class="form-control" id="userCarName" name="user.userCarName" placeholder="Véhicule utilisé">
</div>
<div class="form-group">
<label for="userPowerCar">Nombre de chevaux fiscaux</label>
<s:if test="%{ coefficients == null }">
<select class="form-control" id="exampleFormControlSelect1">
<option>Pas de résultat</option>
</select>
</s:if>
<s:else>
<s:select class = "form-control" id = "coefficients" list = "coefficients" listKey = "idCoefficient" listValue="titleCoefficient" headerKey="-1" headerValue="Selectionnez le type de véhicule" name="coefficient.idCoefficient"></s:select>
</s:else>
</div>
<div class="form-group">
<label for="userKmsPrice">Prix au kilométre</label>
<input type="text" class="form-control" id="userKmsPrice" placeholder="Prix au kilométre" readonly="readonly">
</div>
<div class="form-group">
<label for="userMdp">Mot de passe</label>
<input type="password" class="form-control" id="mdp" name="user.passWord" placeholder="Mot de passe">
</div>
<div class="form-group">
<label for="userConfirmMdp">Confirmation du mot de passe</label>
<input type="password" class="form-control" id="confirmMdp" placeholder="Confirmation du mot de passe">
</div>
</div>
</div>
<button type="submit" class="btn btn-primary">Sauvegarder</button>
</form> |
Ma méthode dans ma classe d'action :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13
| public String RegisterUser() throws Exception { DAO<Users> userDao = DAOFactory.getUsersDao();
DAO<Fonctions> funcDao = DAOFactory.getFonctionsDao();
DAO<Coefficients> coefDao = DAOFactory.getCoefficientsDao();
Fonctions func = funcDao.find(fonction.getIdFonction());
Coefficients coeff = coefDao.find(coefficient.getIdCoefficient());
System.err.println("Fonction : " + func.getFonctionName()); // affichage en console pour voir info bien remontée
user.setFunction(func);
user.setCoeffocient(coeff);
user.setUserIsactif(true);
System.err.println("Fonction : " + user.getFonction().getFonctionName()); // affichage en console pour voir info bien attribuée à mon utilisateur
userDao.create(user); // Enregistrement en base de mon utilisateur
return SUCCESS;
} |
Dans ma base, tout est nikel sauf les FK (il y en a deux : "idFonction" et "idCoefficient") qui correspondent aux liste déroulante des tables "fonction" et "coefficient" des classes correspondante.
Je sais pas si je me suis bien expliqué donc, n'hésitez pas à demander plus de précision et explications.
Merci d'avance pour votre aide (je suis sur que c'est un truc tout con que j'ai zappé de faire ^^).