Uzasadnienie dla repository. Ponieważ wystarczy napisać:
public interface MyBeanRepository extends JpaRepository<MyBean, Long>{}
I masz ogarnięte jakieś 100% podstawowych operacji CRUD. Jeżeli chcesz konstruować pewne często używane zapytania to:
public interface MyBeanRepository extends JpaRepository<MyBean, Long>{
Collection<MyBean> findByProperty(MyProperty value);
Collection<MyBean> findByPropertyId(Long valueId);
}
inaczej mówiąc Spring potrafi na podstawie nazwy metody, która musi trzymać konwencję nazewniczą, rozwinąć sobie całkiem zgrabne zapytanie.
Niestety nie za bardzo będzie radzić sobie z na przykład odpytywaniem widoków, które są prostymi POJO, a my wiemy, że konkretne kolumny mapują się na kolumny w tabelach.
W takim wypadku sprawdza się EM jako sposób dostępu, bo (przynajmniej dla mnie) tworzenie zapytań z jego pomocą jest łatwiejsze w testowaniu. Oczywiście repository pozwala na definiowanie metod z adnotacją Query
, które pod spodem odpalają zapytanie z adnotacji. IMO przy większych zapytaniach jest to jednak trochę bardziej upierdliwe i potrafi nieźle zaciemnić samo zapytanie (łączenie łańcuchów w ramach zapytania fuj).