Ecco l'implementazione Repository generico campione che estende la PagingAndSortingRepository primavera,Come implementare Generico JPA Repository nella primavera del Boot - che può essere autowired in servizi di primavera per qualsiasi tipo di entità/classe
@NoRepositoryBean
public interface GenericRepository<T, ID extends Serializable> extends PagingAndSortingRepository<T, ID> {
public List<T> findByNamedQuery(String name);
public List<T> findByNamedQueryAndParams(String name, Map<String, Object> params);
public T findOneByNamedQuery(String name);
public T findOneByNamedQueryAndParams(String name, Map<String, Object> params);
}
classe Bean Factory,
public class GenericRepositoryFactoryBean<R extends JpaRepository<T, I>, T, I extends Serializable> extends
JpaRepositoryFactoryBean<R, T, I> {
@SuppressWarnings("rawtypes")
protected RepositoryFactorySupport createRepositoryFactory(EntityManager em)
{
return new MyRepositoryFactory(em);
}
private static class MyRepositoryFactory<T, I extends Serializable> extends JpaRepositoryFactory {
private final EntityManager em;
public MyRepositoryFactory(EntityManager em)
{
super(em);
this.em = em;
}
@SuppressWarnings("unchecked")
protected Object getTargetRepository(RepositoryMetadata metadata)
{
return new GenericRepositoryImpl<T, I>((Class<T>) metadata.getDomainType(), em);
}
protected Class<?> getRepositoryBaseClass(RepositoryMetadata metadata)
{
return GenericRepositoryImpl.class;
}
}
}
classe di implementazione,
Così quando provo ad Autowire GenericRepository in servizi per diversi tipi come Customer.java, Message.java ecc. Il lancio richiede almeno un tipo di bean di interfaccia GenericRepository. Funziona se creo repository individuali per il tipo di cliente e di messaggio. Senza creare più repository, non sono in grado di implementarlo.
@Service
@Transactional(noRollbackFor = Exception.class)
public class CustomerService {
@Autowired
private GenericRepository<Customer, Serializable> cr; works fine with just one entity type
@Autowired
private GenericRepository<Message, Serializable> cr; throws exception
Se hanno 100 o più classi di entità, quindi ho finito per creare 100 di repository e che è male. Per favore fatemi sapere se c'è un modo migliore per farlo.
Sono nella stessa identica situazione. Hai trovato qualcosa di utile? Grazie ! – Moltes
Avete capito come implementarlo? Sono nella stessa situazione pure. – Sannu