Implementando la sezione relativa alle operazioni CRUD sulle entità mi sono dovuta confrontare con le queries JPA. Non è complicato generare una query utilizzando la sintassi adatta perchè si tratta di un linguaggio molto simile all' sql, ma allo stesso tempo con delle importanti differenze che ho dovuto imparare.
Riporto alcuni esempi di queries che ho utilizzato:
Seleziono i prodotti che possegono l'attributo "deleted" = 0 ordinandoli per data di inserimento. Da notare che Product è l'entità, non la tabella.
entityManager.createQuery("SELECT p FROM Product p WHERE p.deleted = 0 ORDER BY p.inserted").getResultList();
Stessa query di prima, ma seleziono solo i primi 10 elementi.
entityManager.createQuery("SELECT p FROM Product p WHERE p.deleted = 0 ORDER BY p.inserted DESC LIMIT 0,10").getResultList();
Posso selezionare anche un solo attributo (in questo caso itemsNum).
entityManager.createQuery("SELECT p.itemsNum FROM Product p WHERE p.productCode = 333").getSingleResult();
Posso fare JOIN tra due entità solo se esiste una relazione tra di esse. In questo caso setto "orderShop" nella query attraverso il metodo "setParameter".
Query q = entityManager.createQuery("SELECT p FROM Product p JOIN p.orderShopList o WHERE o = :orderShop ORDER BY p.inserted");
q.setParameter("orderShop", new OrderShop(orderId));
obj = q.getResultList();
Per salvare un oggetto nel DB non devo far altro che richiamare il metodo "persist" passandogli l'oggetto( ma solo se si tratta di un'entità).
entityManager.persist(product);
Fatto ciò, per vedere il nuovo id assegnato a product, non devo far altro che scrivere product.getProductCode();
Per aggiornare un oggetto.
Product p = em.find(Product.class, productCode);
p.setDeleted(false);
Riporto alcuni esempi di queries che ho utilizzato:
Seleziono i prodotti che possegono l'attributo "deleted" = 0 ordinandoli per data di inserimento. Da notare che Product è l'entità, non la tabella.
entityManager.createQuery("SELECT p FROM Product p WHERE p.deleted = 0 ORDER BY p.inserted").getResultList();
Stessa query di prima, ma seleziono solo i primi 10 elementi.
entityManager.createQuery("SELECT p FROM Product p WHERE p.deleted = 0 ORDER BY p.inserted DESC LIMIT 0,10").getResultList();
Posso selezionare anche un solo attributo (in questo caso itemsNum).
entityManager.createQuery("SELECT p.itemsNum FROM Product p WHERE p.productCode = 333").getSingleResult();
Posso fare JOIN tra due entità solo se esiste una relazione tra di esse. In questo caso setto "orderShop" nella query attraverso il metodo "setParameter".
Query q = entityManager.createQuery("SELECT p FROM Product p JOIN p.orderShopList o WHERE o = :orderShop ORDER BY p.inserted");
q.setParameter("orderShop", new OrderShop(orderId));
obj = q.getResultList();
Per salvare un oggetto nel DB non devo far altro che richiamare il metodo "persist" passandogli l'oggetto( ma solo se si tratta di un'entità).
entityManager.persist(product);
Fatto ciò, per vedere il nuovo id assegnato a product, non devo far altro che scrivere product.getProductCode();
Per aggiornare un oggetto.
Product p = em.find(Product.class, productCode);
p.setDeleted(false);
Nessun commento:
Posta un commento