如何使用Spring Data Repositories作为Vaadin JPAContainer

时间:2013-08-07 15:10:25

标签: java spring vaadin spring-data-jpa

是否可以将org.springframework.data.jpa.repository.JpaRepository存储库用作JPAContainer的Vaadin?

我们正在从Spring开始建立一个新的Vaadin 7项目。

Spring集成使用Spring Vaadin Integration Addon完成。

3 个答案:

答案 0 :(得分: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));

或jsut simple

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 :(得分: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);

        }
    }

答案 2 :(得分:0)

Spring Data与JPAContainer的架构不兼容。一般来说,我建议根本不使用JPAContainer,而只是从Spring Data存储库获取实体并将它们传递给Vaadin组件。例如:

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

在Vaadin 8出局之前,我还建议使用Viritin(我是作者,并且一直在维护和开发Vaadin本身十年),它可以为您提供更好的打字,更简单的API以及更好的性能。有关完整堆栈示例应用,请参阅this Spring Data CRUD example