Bonjour à tous,
Je développe un outil avec Java EE et l'un de mes formulaires permet de gérer l'intitulé d'une liste déroulante.
Tout fonctionne très bien (insertion, modif, suppression) mais lorsque je veux faire plusieurs insertions de suite, cela ne marche pas parce que j'essaie d'insérer avec la même valeur de séquence (je me demande pourquoi il ne va pas chercher le nextval). L'insertion refonctionne si on rafraîchit la page.
J'ai essayé de modifier le type de séquence utilisé par JPA et d'autres choses, je tâtonne un peu car je suis assez nouveau avec l'utilisation de JSF/JPA.
J'ai trouvé énormément d'exemples qui fonctionnent en utilisant le même code que moi mais de mon côté ca ne veut pas...
J'aurais donc besoin de votre aide car il y a sûrement quelque chose que j'ai mal fait. Je pensais régler tout cela en utilisant un trigger mais bon une séquence est censée faire le boulot normalement !
Merci d'avance pour votre aide et n'hésitez pas à me demander des précisions si je ne suis pas clair !
Le formulaire :
Le Backing Bean :
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 <h:form id="formulaire"> <p:growl id="messages" showDetail="true"/> <p:panel header="Création d'une absence" toggleable="true" toggleSpeed="500"> <h:outputLabel for="cause">Cause d'absence <span class="requis">*</span></h:outputLabel> <p:inputText id="cause" value="#{gestionAbsenceBean.absence.cause}" size="20" maxlength="30"> <f:ajax event="blur" render="causeMessage" update=":formulaire:messages"/> <!-- f:validator binding="#{existenceAbsenceValidator}" /> --> </p:inputText> <h:message id="causeMessage" for="cause" errorClass="erreur" /><br /> <p:commandButton value="Créer" action="#{gestionAbsenceBean.creation}" update=":formulaire2:listeAbsences :formulaire:messages" process="@form" ajax="true"> </p:commandButton> <br /> </p:panel> </h:form>
La classe DAO :
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 @ManagedBean @ViewScoped public class GestionAbsenceBean implements Serializable { private static final long serialVersionUID = 1L; private Absence absence; private List<Absence> absences; // Injection de notre EJB (Session Bean Stateless) @EJB private AbsenceDao absenceDao; @PostConstruct public void init() { lister(); } // Initialisation de l'entité utilisateur public GestionAbsenceBean() { absence = new Absence(); } // Méthode d'action appelée lors du clic sur le bouton duformulaire // d'inscription public void creation() { absenceDao.creer( absence ); FacesMessage message = new FacesMessage( "Succès de la création !", absence.getId().toString() + " " + absence.getCause() ); FacesContext.getCurrentInstance().addMessage( null, message ); lister(); } ...
L'entité :
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 @Stateless public class AbsenceDao { private static final String JPQL_SELECT_PAR_ID = "SELECT a FROM Absence a WHERE a.id=:id"; private static final String JPQL_SELECT_PAR_NOM = "SELECT a FROM Absence a WHERE a.nom=:nom"; private static final String JPQL_SELECT_ALL = "SELECT a FROM Absence a ORDER BY a.cause ASC"; private static final String PARAM_ID = "id"; private static final String PARAM_NOM = "nom"; // Injection du manager, qui s'occupe de la connexion avec la BDD @PersistenceContext( unitName = "bdd_sgg_PU" ) private EntityManager em; public void creer( Absence absence ) throws DAOException { try { em.persist( absence ); } catch ( Exception e ) { throw new DAOException( e ); } } ...
La séquence :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 @Entity @SequenceGenerator( name = "AbsSeq", sequenceName = "ABSENCE_SEQ", allocationSize = 1 ) public class Absence { @Id @GeneratedValue( strategy = GenerationType.SEQUENCE, generator = "AbsSeq" ) private Integer id; ...
Tech : JPA (Eclipselink), JSF (dont Primefaces), Oracle, Glassfish 4
Code : Sélectionner tout - Visualiser dans une fenêtre à part CREATE SEQUENCE "CEDRIC"."ABSENCE_SEQ" MINVALUE 1 MAXVALUE 1,00000000000000E+27 INCREMENT BY 1 START WITH 64 NOCACHE NOORDER CYCLE ;
Partager