2013-11-24 14 views

risposta

8

È possibile creare istanze repository individuali dichiarando un JpaRepositoryFactoryBean manualmente:

@Configuration 
class Config { 

    @Bean 
    public JpaRepositoryFactoryBean userRepository() { 
    JpaRepositoryFactoryBean factory = new JpaRepositoryFactoryBean(); 
    factory.setRepositoryInterface(UserRepository.class); 
    return factory; 
    } 
} 

Ciò causerà Primavera per chiamare getObject() per ottenere il proxy repository dalla fabbrica e potenzialmente iniettarla in clienti.

Tuttavia, direi che, se non configurato in modo errato, il sovraccarico di scansione per i repository è trascurabile, esp. rispetto al tempo di inizializzazione di un EntityManagerFactory prende.

+1

Grazie Oliver !! –

+1

La scansione dei componenti può rappresentare un problema di prestazioni in alcuni cloud runtime (ovvero Google App Engine) in cui le istanze delle app devono "scaldarsi" (in pratica una completa re-distribuzione) dopo un po 'di tempo. La tua soluzione potrebbe essere più utile di quanto ti aspetti, grazie! –

+0

@Oliver Gierke Questo è tutto ok ma c'è un piccolo problema. Poiché la mia applicazione è multitenant, non posso creare JpaRepositoryFactoryBean come sopra. c'è un modo per crearlo pigramente? anche JpaRepositoryFactoryBean è collegato con userRepository, come creare più factory bean per questo? –

1

Se si desidera solo configurare un fagiolo repository di cemento è possibile utilizzare direttamente la fabbrica per creare in questo modo:

@Configuration 
public class NotificationConfig { 

    @Bean 
    public NotificationRepository notificationRepository(EntityManager entityManager) { 
     JpaRepositoryFactory jpaRepositoryFactory=new JpaRepositoryFactory(entityManager); 
     return jpaRepositoryFactory.getRepository(NotificationRepository.class); 
    } 

} 
Problemi correlati