complete refactoring (#12, #13, #14) now using Spring Data JPA