2013-08-07 34 views
9

對於Vaadin,可以使用org.springframework.data.jpa.repository.JpaRepository存儲庫作爲JPAContainer嗎?如何使用Spring數據存儲庫作爲Vaadin JPAContainer

我們正在用Spring 3.2從頭開始創建一個新的Vaadin 7項目。

春季整合與Spring Vaadin Integration Addon完成。

+0

克里斯,你有沒有找到一個解決方案?我正在努力解決同樣的問題,目前我加載了一個實體列表,創建一個BeanContainer,在foreach循環中添加實體並將其添加到表中。有沒有更好的辦法? –

+0

不,我需要自己實例化JPAContainer。我自動裝入EntityMangerFactory,然後將它傳遞給一個新的JPAContainer – d0x

回答

1

至於你可以從JPARepository得到EntityProvider或其他地方,你可以使用JPAContainer這樣的:

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

或僅僅指剛簡單

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

那麼,你應該閱讀下面的帖子,並決定是否您不希望將JPARepository作爲模型層使用並將其包裝到BeanItemContainer中,因爲JPAContainer看起來不錯,但從我的角度來看有一些性能問題。

JPAContainer issues and different approach

MVP pattern and POJO binding with Hibernate

+1

我的目標是從應用程序上下文中獲得一個JPAContainer。例如,spring會爲每個JPARepository實例化一個JPAContainer。我不喜歡自己實例化它們。 – 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

春天數據不與JPAContainer的架構兼容。一般來說,我建議不要使用JPAContainer,而只是從Spring Data存儲庫中獲取實體,並將它們傳遞給Vaadin組件。例如:

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

直到Vaadin 8已經出來了,我也建議使用Viritin(我是作者,也一直在保持和發展Vaadin本身了十年),讓你更好的打字,簡單的API和也更好的性能。請參閱this Spring Data CRUD example瞭解完整堆棧示例應用程序。