2013-08-07 50 views
9

Có thể sử dụng Kho lưu trữ org.springframework.data.jpa.repository.JpaRepository làm JPAContainer cho Vaadin không?Cách sử dụng Kho dữ liệu mùa xuân như Vaadin JPAContainer

Chúng tôi đang thiết lập Dự án Vaadin 7 mới từ đầu mùa xuân 3.2.

Việc tích hợp Spring được thực hiện với Spring Vaadin Integration Addon.

+0

Chris, bạn đã tìm thấy giải pháp chưa? Tôi đang đấu tranh với cùng một vấn đề và hiện tại tôi tải một danh sách các thực thể, tạo BeanContainer, thêm các thực thể bên trong trong một chu trình foreach và thêm nó vào bảng. Có cách nào tốt hơn? –

+0

Không, tôi cần tự mình lập JPAContainer. Tôi autowire các EntityMangerFactory và sau đó vượt qua nó để một JPAContainer mới – d0x

Trả lời

1

Như xa như bạn có thể nhận EntityProvider từ JPARepository hoặc một nơi nào khác mà bạn có thể sử dụng JPAContainer như thế này:

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

hoặc jsut đơn giản

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

Vâng, bạn nên đọc bài sau đây và quyết định xem bạn không muốn sử dụng bạn JPARepository như một lớp mô hình và bọc nó vào BeanItemContainer, cuz JPAContainer có vẻ tốt nhưng có một số vấn đề hiệu suất từ ​​quan điểm của tôi.

JPAContainer issues and different approach

MVP pattern and POJO binding with Hibernate

+1

Mục tiêu của tôi là để có được một JPAContainer từ bối cảnh ứng dụng. Ví dụ: spring instantiates JPAContainer cho mỗi JPARepository. Tôi không thích tự mình làm sáng tỏ. – 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

mùa xuân dữ liệu không tương thích với kiến ​​trúc của JPAContainer. Nói chung, tôi khuyên bạn không nên sử dụng JPAContainer, nhưng chỉ lấy các thực thể từ kho dữ liệu Spring và chuyển chúng cho các thành phần Vaadin như vậy. Ví dụ:

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

Cho đến Vaadin 8 là ra, tôi cũng đề nghị sử dụng Viritin (Tôi là tác giả và cũng đã được duy trì và phát triển Vaadin bản thân trong một thập kỷ) mang đến cho bạn gõ tốt hơn, API đơn giản hơn và cũng hiệu suất tốt hơn. Xem this Spring Data CRUD example để có ứng dụng mẫu đầy đủ.