public class Book implements Serializable {
Z tego co czytam to Hibernate nie wymaga Serializable. Jako, że Serializable jest kontrowersyjne to nie trzymałbym się tego rozwiązania
Kopiuj
public interface DAO<T extends Serializable> {
void persist(T entity);
T findById(Integer id);
List<T> findAll();
void update(T entity);
void delete(T entity);
void deleteAll();
}
Za bardzo nie widzę sensu posiadania takiego interfejsu. Jak często potrzebujesz generycznego kodu, który powinien działać jednocześnie dla DAO<User> i DAO<Order>? Interfejs to narzut, jeśli nikt nie korzysta z abstrakcji, to nie ma to sensu. Jeśli chcesz go zatrzymać to warto go IMO rozbić. Rzadko w prawdziwej aplikacji chcesz implementować wszystkie metody
Kopiuj
private Session openSession() {
sessionFactory = getSessionFactory();
session = sessionFactory.openSession();
return session;
}
Ten kod nie jest bezpieczny do wywołania z wielu wątków, bo modyfikujesz pole w klasie DAO. Lepiej po prostu użyć zmiennych lokalnych
Kopiuj
T findById(Integer id);
Lepiej zwrócić Optional<T> przez co dla użytkownika API oczywistym jest, że wartości może nie być