add throws on validation
extract ierarchy
move most logic in base class
refactor
add find by id and findAll