Bonjour,
Je me décide enfin à venir appeler à l'aide, je suis très jeune dans l'univers J2EE, et je rencontre un problème qui me bloque depuis quelques jours, concernant la mise à un jour d'un entity bean.
Je vous liste l'état des choses :
La création d'un objet et l'appel à persist() de l'entity manager enregistre bien l'état de l'objet dans la table.
La récuperation par une NamedQuery fonctionne et me retourne bien l'objet que je souhaite modifier.
La modification de son état par les setters n'est jamais répercuté dans la base de données.
Tout comme la suppression d'un objet par remove sur l'entity manager.
Je ne sais vraiment plus d'ou cela peut venir, j'ai testé auparavant sur Geronimo, et maintenant sur Glassfish, et le même problème se rencontre.
L'erreur devrait se trouver à mon avis dans la classe Entity ou dans le bean session qui y accède, je vous offre les deux en cette heure, si vous l'acceptez bien.
entity.Account
session.AccountBean
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 entity; import java.io.Serializable; import javax.persistence.Entity; import javax.persistence.GeneratedValue; import javax.persistence.GenerationType; import javax.persistence.Id; import javax.persistence.NamedQueries; import javax.persistence.NamedQuery; @NamedQueries({ @NamedQuery(name="checkLogin",query="SELECT a FROM Account a WHERE a.login=:login AND a.password=:password") }) @Entity public class Account implements Serializable { private Long id; private String login; private String password; private double balance; public Account(){} @Id @GeneratedValue(strategy = GenerationType.AUTO) public Long getId() { return id; } public String getLogin() { return this.login; } public void setLogin(String login) { this.login = login; } public String getPassword() { return this.password; } public void setPassword(String password) { this.password = password; } public void setBalance(double balance) { this.balance = balance; } public double getBalance() { return this.balance; } public void setId(Long id) { this.id = id; } @Override public String toString() { return "entity.Account[id=" + id + ";user=" + this.login + ";" + this.balance + "$]"; } }
Et mon fichier persistence.xml, au cas ou.
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 package session; import entity.Account; import javax.ejb.Stateful; import javax.persistence.EntityManager; import javax.persistence.NoResultException; import javax.persistence.PersistenceContext; import javax.persistence.Query; import javax.ejb.EJB; @Stateful public class AccountBean implements AccountRemote, java.io.Serializable { private Account account; @PersistenceContext(unitName="ShopPU") private EntityManager em; public void createAccount(String user, String pass, double deposit) { Account account = new Account(); account.setLogin(user); account.setPassword(pass); account.setBalance(deposit); this.em.persist(account); } public boolean loadAccount(String user, String pass) { Query query = this.em.createNamedQuery("checkLogin"); query.setParameter("login", "user"); query.setParameter("password", "pass"); try { this.account = (Account) query.getSingleResult(); } catch (NoResultException e) { return false; } return true; } public void deposit(double amount) { if (this.account != null){ double balance = this.account.getBalance() + amount; this.account.setBalance(balance); } } public double getBalance() { if (this.account != null) return this.account.getBalance(); return 0.; } public double withdraw(double amount) { if (this.account == null) return 0.; double balance = this.account.getBalance() - amount; this.account.setBalance(balance); return this.account.getBalance(); } }
Voila, si vous aviez un maigre temps à consacrer à ce sujet, je serais ravi de voir un peu plus de lumière sur ce nouveau monde qu'est J2EE pour moi.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 <?xml version="1.0" encoding="UTF-8"?> <persistence version="1.0" xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd"> <persistence-unit name="ShopPU" transaction-type="JTA"> <provider>oracle.toplink.essentials.PersistenceProvider</provider> <jta-data-source>jdbc/sample</jta-data-source> <properties> <property name="toplink.ddl-generation" value="drop-and-create-tables"/> </properties> </persistence-unit> </persistence>
Bonne soirée (:
Partager