Gros problème de compréhension pour "commiter" mes entity en base
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:
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
| // 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:
1 2 3 4 5 6
| // 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.