2013-08-07 8 views
9

Ist es möglich, die org.springframework.data.jpa.repository.JpaRepository Repositories als JPAContainer für Vaadin zu verwenden?Wie verwendet man Spring Data Repositories als Vaadin JPAContainer

Wir erstellen ein neues Vaadin 7 Projekt von Grund auf mit Spring 3.2.

Die Federintegration erfolgt mit Spring Vaadin Integration Addon.

+0

Chris, hast du eine Lösung gefunden? Ich habe mit dem gleichen Problem zu kämpfen und derzeit lade ich eine Liste von Entitäten, erstellen Sie einen BeanContainer, fügen Sie innerhalb eines foreach Zyklus Elemente hinzu und fügen Sie es der Tabelle hinzu. Gibt es einen besseren Weg? –

+0

Nein, ich muss den JPACintainer selbst instanziieren. Ich Autowire die EntityMangerFactory und dann an einen neuen JPAContainer übergeben – d0x

Antwort

1

Soweit Sie EntityProvider von JPARepository oder irgendwo sonst kann man JPAContainer wie diese verwenden zu können:

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)); 

oder jsut einfach

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

Nun, sollten Sie folgenden Beitrag lesen und entscheiden, ob Du wolltest dein JPAR-Repository nicht als Model-Layer verwenden und es in BeanItemContainer einbinden, da JPAContainer gut aussieht, aber aus meiner Sicht einige Performance-Probleme hat.

JPAContainer issues and different approach

MVP pattern and POJO binding with Hibernate

+1

Mein Ziel ist es, einen JPACintainer von der Anwendung Kontext zu bekommen. Zum Beispiel stellt spring einen JPAContainer für jedes JPAR-Repository instanziiert auf. Ich mag es nicht, sie selbst zu instantiieren. – 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

Spring Data ist nicht mit der Architektur von JPAContainer kompatibel. Im Allgemeinen würde ich vorschlagen, JPAContainer überhaupt nicht zu verwenden, sondern nur die Entitäten aus dem Spring Data-Repository zu holen und sie für Vaadin-Komponenten als solche weiterzugeben. Beispiel:

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

Bis Vaadin 8 ist out, schlage ich vor, auch Viritin zu verwenden (ich bin der Autor und auch wurden die Erhaltung und Entwicklung Vaadin sich seit einem Jahrzehnt), die Sie besser Typisierung gibt, einfacher APIs und auch bessere Leistung. Eine vollständige Beispielanwendung für einen Stapel finden Sie unter this Spring Data CRUD example.

Verwandte Themen