C
carmelo
Hello everybody,
I developed a CRUD application using TopLink Essentials as persistence
provider. I've got the following problem:
I have to save data according to the master-details scheme, but I can
not read that unless restarting the application, even if they are
already physically on the database before restarting.
In practice, I read master/details of an offer and transform them into
master/details of an order, storing them on db.
Since these data are generated within another transaction, I created
another EntityManager called entityManager2.
This is the code I'm using:
org.jdesktop.application.ResourceMap resourceMap =
org.jdesktop.application.Application.getInstance(desktopapplication_db_advanced.DesktopApplication_db_advanced.class).getContext().getResourceMap(OffertaEditor.class);
EntityManager entityManager2 =
javax.persistence.Persistence.createEntityManagerFactory(resourceMap.getString("entityManager.persistenceUnit")).createEntityManager();
try {
entityManager2.getTransaction().begin();
int numOrdine = 0;
Object res = entityManager2.createQuery("SELECT
MAX(o.numOrdine) FROM Ordini o WHERE o.anno
= :anno").setParameter("anno", anno).getSingleResult();
entityManager2.getTransaction().commit();
if (res != null) {
numOrdine = (Integer) res;
}
numOrdine++;
numOrdineField.setText(String.valueOf(numOrdine));
//create order from offer
entityManager2.getTransaction().begin();
//master order
int index = masterTable.getSelectedRow();
offerta.Offerte of =
list.get(masterTable.convertRowIndexToModel(index));
ordine.Ordini ord = new ordine.Ordini();
ord.setCodiceCliente(Integer.parseInt(clienteField.getText()));
ord.setNumOfferta(of.getNumOfferta());
ord.setNumOrdine(numOrdine);
entityManager2.persist(ord);
//details order
Collection<offerta.Dettofferte> ds = of.getDettofferteList();
Iterator<offerta.Dettofferte> iter = ds.iterator();
int rows = detailTable.getRowCount();
for (int idx = 0; idx < rows; idx++) {
offerta.Dettofferte dettoff = iter.next();
ordine.Dettordini dettord = new Dettordini();
dettord.setCodiceArticolo(dettoff.getCodiceArticolo());
dettord.setDescrizione(dettoff.getDescrizione());
dettord.setNumOrdine(numOrdine);
dettord.setPrezzo(dettoff.getPrezzo());
dettord.setQuantita(dettoff.getQuantita());
dettord.setTotale(dettoff.getTotale());
entityManager2.persist(dettord);
dettord.setCodiceOrdine(ord);
}
entityManager2.getTransaction().commit();
entityManager2.close();
} catch (RollbackException rex) {
rex.printStackTrace();
entityManager2.getTransaction().rollback();
entityManager2.close();
}
Would you have any advice?
I hope you can help me. Thank you very much in advance!
I developed a CRUD application using TopLink Essentials as persistence
provider. I've got the following problem:
I have to save data according to the master-details scheme, but I can
not read that unless restarting the application, even if they are
already physically on the database before restarting.
In practice, I read master/details of an offer and transform them into
master/details of an order, storing them on db.
Since these data are generated within another transaction, I created
another EntityManager called entityManager2.
This is the code I'm using:
org.jdesktop.application.ResourceMap resourceMap =
org.jdesktop.application.Application.getInstance(desktopapplication_db_advanced.DesktopApplication_db_advanced.class).getContext().getResourceMap(OffertaEditor.class);
EntityManager entityManager2 =
javax.persistence.Persistence.createEntityManagerFactory(resourceMap.getString("entityManager.persistenceUnit")).createEntityManager();
try {
entityManager2.getTransaction().begin();
int numOrdine = 0;
Object res = entityManager2.createQuery("SELECT
MAX(o.numOrdine) FROM Ordini o WHERE o.anno
= :anno").setParameter("anno", anno).getSingleResult();
entityManager2.getTransaction().commit();
if (res != null) {
numOrdine = (Integer) res;
}
numOrdine++;
numOrdineField.setText(String.valueOf(numOrdine));
//create order from offer
entityManager2.getTransaction().begin();
//master order
int index = masterTable.getSelectedRow();
offerta.Offerte of =
list.get(masterTable.convertRowIndexToModel(index));
ordine.Ordini ord = new ordine.Ordini();
ord.setCodiceCliente(Integer.parseInt(clienteField.getText()));
ord.setNumOfferta(of.getNumOfferta());
ord.setNumOrdine(numOrdine);
entityManager2.persist(ord);
//details order
Collection<offerta.Dettofferte> ds = of.getDettofferteList();
Iterator<offerta.Dettofferte> iter = ds.iterator();
int rows = detailTable.getRowCount();
for (int idx = 0; idx < rows; idx++) {
offerta.Dettofferte dettoff = iter.next();
ordine.Dettordini dettord = new Dettordini();
dettord.setCodiceArticolo(dettoff.getCodiceArticolo());
dettord.setDescrizione(dettoff.getDescrizione());
dettord.setNumOrdine(numOrdine);
dettord.setPrezzo(dettoff.getPrezzo());
dettord.setQuantita(dettoff.getQuantita());
dettord.setTotale(dettoff.getTotale());
entityManager2.persist(dettord);
dettord.setCodiceOrdine(ord);
}
entityManager2.getTransaction().commit();
entityManager2.close();
} catch (RollbackException rex) {
rex.printStackTrace();
entityManager2.getTransaction().rollback();
entityManager2.close();
}
Would you have any advice?
I hope you can help me. Thank you very much in advance!