2013-08-07 8 views
9

È possibile utilizzare i repository come JPAContainer per Vaadin?Come utilizzare i repository di dati Spring come Vaadin JPAContainer

Stiamo creando un nuovo progetto Vaadin 7 da zero con Spring 3.2.

L'integrazione di Spring viene eseguita con Spring Vaadin Integration Addon.

+0

Chris, hai trovato una soluzione? Sto lottando con lo stesso problema e attualmente carico un elenco di entità, creo un BeanContainer, aggiungo entità all'interno di un ciclo foreach e lo aggiungo alla tabella. C'è un modo migliore? –

+0

No, ho bisogno di istanziare il JPAContainer da solo. Autowire EntityMangerFactory e quindi passarlo a un nuovo JPAContainer – d0x

risposta

1

Per quanto si può ottenere EntityProvider da JPARepository o da qualche altra parte si può usare JPAContainer come questo:

EntityManager entityManager = getEntityManager(Campaign.class)); 
MutableLocalEntityProvider<Campaign.class)> provider; 
provider = new CachingMutableLocalEntityProvider<Campaign.class)>(Campaign.class), entityManager); 
provider.setTransactionsHandledByProvider(false); 
JPAContainer<Campaign> container = new JPAContainer<Campaign>(Campaign.class);  container.setEntityProvider(EntityProviderUtil.get().getEntityProvider(Campaign.class)); 

o sono finite semplice

EntityManager entityManager = getEntityManager(Campaign.class)); 
JPAContainer<Campaign> container = JPAContainerFactory.make(Campaign.class, entityManager) 

Beh, si dovrebbe leggere seguente post e decidere se non volevi utilizzare il tuo JPARepository come livello di modello e avvolgerlo in BeanItemContainer, perché JPAContainer ha un bell'aspetto ma ha alcuni problemi di prestazioni dal mio punto di vista.

JPAContainer issues and different approach

MVP pattern and POJO binding with Hibernate

+1

Il mio obiettivo è ottenere un JPAContainer dal contesto dell'applicazione. Ad esempio, la molla istanzia un JPAContainer per ogni JPARepository. Non mi piace istanziarli da solo. – d0x

1
import javax.persistence.EntityManager; 
    import javax.persistence.PersistenceContext; 

    import com.vaadin.addon.jpacontainer.JPAContainer; 
    import com.vaadin.addon.jpacontainer.JPAContainerFactory; 

    @SpringComponent 
    public class SpringDataVaadinJPAContainer { 
     @PersistenceContext 
     private EntityManager entityManager; 

     public SpringDataVaadinJPAContainer() { 
      JPAContainer<Person> container = JPAContainerFactory.make(Person.class, entityManager); 

     } 
    } 
0

primavera dati non è compatibile con l'architettura di JPAContainer. In generale, suggerirei di non utilizzare affatto JPAContainer, ma solo ottenere le entità dal repository Spring Data e passarle per i componenti Vaadin come tali. Esempio:

grid.setContainerDataSource(new BeanItemContainer(Person.class, repo.findAll()); 

Fino Vaadin 8 è fuori, suggerisco anche di utilizzare Viritin (Sono l'autore Ed inoltre sono stati mantenere e sviluppare Vaadin se stesso per un decennio) che ti dà una migliore digitazione, API più semplici e anche prestazioni migliori. Vedi this Spring Data CRUD example per un'app di esempio con stack completo.