Witam. Tak się zastanawiam, czy przy operacjach na encjach takich jak zapis, edycja, odczyt należy łapać wyjątki? Np. operacja zapisu może się nie powieść itp? Dajmy na to takiego persista, merge czy remove. Czy należy umieszczać to w bloku try catch i łapać jakiś wyjątek JPA? Jak to wygląda w profesjonalnych aplikacjach?
@Override
public void createUser(User user) {
entityManager.persist(user);
}
Druga sprawa to mam np. metodę, która zwraca listę:
@SuppressWarnings("unchecked")
@Override
public List<Transfer> getTransferAccount(int id) {
Query query = entityManager
.createQuery("select t from Transfer t where t.userAccountFrom.id = :id or t.userAccountTo.id = :id order by t.data DESC");
query.setParameter("id", id);
List<Transfer> transfers = query.getResultList();
return transfers;
}
Kompilator ostrzega, żeby dodać adnotację suppressWarnings ze względu na niepewną konwersję. Robi się to może inaczej? Czy trzeba koniecznie dodawać tą adnotację? Czy może po prostu pominąć to ostrzeżenie o dodaniu suppreswarnings i nie dodawać tej adnotacji. Tylko, że wtedy mam podobny problem ze zwracaniem pustej listy jak w niżej opisanym przykładzie o pojedynczym rekordzie.
Gdy zwracam pojedynczy rekord to wystarczy rzutowanie i mogę uniknąć suppresWarnings, jednak muszę taki kod umieszczać w bloku try catch inaczej wywali mi błąd null pointer exception. Tylko, że to nie bardzo jest jakaś sytuacja wyjątkowa, bo zapytanie może zwrócić nulla bo po prostu nie ma takiej daty. I tak ostatecznie wychodzi taki zbędny try catch. W catchu to właściwie nie ma czego obsługiwać bo to żaden błąd z punktu widzenia aplikacji, że nie zwróciło daty. Jak należy takie sytuacje obsłużyć? Trochę chaotycznie to opisałem, ale myślę, że wiadomo o co chodzi.
@Override
public Date getLastTransaction(int id) {
Date lastTransfer = null;
try {
Query query = entityManager
.createQuery("select max(t.data) from Transfer t where t.userAccountFrom.id = :id");
query.setParameter("id", id);
lastTransfer = (Date) query.getSingleResult();
} catch (Exception e) {
System.out.println(e.getMessage());
}
return lastTransfer;
}