2014-07-21 5 views
6

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); 
    } 
} 
+0

perché stai facendo tutto questo delegazione manuale invece di utilizzare direttamente le interfacce repository? – chrylis

+0

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

+0

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

risposta