Sto costruendo una piccola applicazione utilizzando Spring e Spring Data JPA e ho bisogno di utilizzare i metodi CrudRepository nel livello di servizio, quindi ho creato 2 classi: GenericService e GenericServiceImpl. Ma non so se questo sia l'approccio giusto o addirittura il migliore.Metodi grezzi nel livello di servizio utilizzando Spring Data JPA
Ecco un esempio:
POJO:
@Entity
public class User {
@Id
private Long id;
private String username;
}
DAO:
public interface UserDAO extends CrudRepository<User, Long> {
User findOneByUsername(String username);
}
servizio generico
public interface GenericService<T, ID extends Serializable> {
<S extends T> S save(S entity);
}
Servizio
public interface UserService extends GenericService<User, Long> {
User findOneByUsername(String username);
}
Servizio generico impl.
public class GenericServiceImpl<T, ID extends Serializable> implements GenericService<T, ID> {
@Autowired
private CrudRepository<T, ID> repository;
@Override
public <S extends T> S save(S entity) {
return repository.save(entity);
}
}
Service Impl.
@Service
@Transactional
public class UserServiceImpl extends GenericServiceImpl<User, Long> implements UserService {
@Autowired
private UserDAO userDAO;
@Override
public User findOneByUsername(String username) {
userDAO.findOneByUsername(username);
}
}
perché stai facendo tutto questo delegazione manuale invece di utilizzare direttamente le interfacce repository? – chrylis
Cosa intendi con 'usare le interfacce del repository direclty'? Stavo cercando di fare qualcosa di simile a questo [Spring and Autowiring of Generic Types] (http://www.jayway.com/2013/11/03/spring-and-autowiring-of-generic-types/) – jonas
Voglio dire autowire il tuo 'CrudRepository' direttamente nel codice che sta manipolando gli oggetti invece di avere una gerarchia di servizio separata che semplicemente la replica. – chrylis