Pages

Gros problème de compréhension pour "commiter" mes entity en base sujet

mercredi 29 janvier 2014




Bonjour à tous,

J'ai comme entity : Book, OrderLine et Order.
Une orderLine pointe sur un book et un order.

Je n'arrive pas à mettre à jour mon orderLine, voici ma fonction avec des commentaires qui vont bien :


Code:


// Ajouter au panier
        public Order addInOrder(Book book, int orderId) {

                //Vérification si une ligne existe déjà avec ce livre
                TypedQuery<OrderLine> queryName = em
                                .createQuery(
                                                "Select cl From OrderLine cl Where order.id = :orderId AND book.isbn = :isbn",
                                                OrderLine.class);
                queryName.setParameter("orderId", orderId);
                queryName.setParameter("isbn", book.getIsbn());

                //List car getSimpleResult plante si il est vide...
                List<OrderLine> orderLine = queryName.getResultList();

                //Si il n'y a pas d'orderLine avec ce livre dans notre order
                if (orderLine.size() == 0) {

                        //On rechercher notre order en base
                        TypedQuery<Order> queryName2 = em.createQuery(
                                        "Select cl From Order cl Where cl.id = :orderId", Order.class);
                        queryName2.setParameter("orderId", orderId);

                        Order Order = queryName2.getSingleResult();

                        //on créé une nouvelle ligne
                        OrderLine orderline = new OrderLine();
                        orderline.setBook(book);
                        orderline.setQuantity(1);
                       
                        // On fait en sorte que notre order ai cette ligne ? Automatique ?
// Si je met un persist(orderline) j'ai l'erreur Caused by: javax.validation.UnexpectedTypeException: No validator could be found for type: java.lang.Integer

                } else {
                       
                        //Si on a trouvé une ligne avec ce livre, on rajoute 1 à la quantité de livre
                        int quantity = orderLine.get(0).getQuantity();
                        quantity++;
                        orderLine.get(0).setQuantity(quantity);
                       
                        // Ne fait apparement rien sauf enlever la police rouge de ma quantité quand je pointe mon objet avec ma sourie
                        // comme si il l'avait mis à jour....
                        em.persist(orderLine.get(0));
                }
               
                // Récupération de notre order mis à jour... ou pas...
                TypedQuery<Order> queryName2 = em.createQuery(
                                "Select cl From Order cl Where cl.id = :orderId", Order.class);
                queryName2.setParameter("orderId", orderId);

                //Récupération de l'ancien order, il n'est pas à jour, la ligne non plus.
                Order order2 = queryName2.getSingleResult();
               
                //Obligé de retourner notre order pour mettre notre Order de notre bean à jour ?
                return order2;
               
        }


Pourtant ailleurs dans mon code, ça fonctionne :


Code:


// Changer le mot de passe
        public User updateMdp(User user, String mdp) {
                User userM = em.find(User.class, user.getLogin());
                userM.setMotDePasse(mdp);
                return userM;
        }


Je suis en JTA donc pas de commit.




Aucun commentaire:

Enregistrer un commentaire