我正在努力学习vaadin。我真的很困惑如何使用持久性进行任何类型的应用程序开发,因为如果我引用了我的服务层对象,它们会存储在会话中,我真的不希望这样。持久性的东西是不可序列化的。
我的情况是我已经制作了一个使用 Spring 的应用程序,并且我正在使用 Vaadin 为它创建一个新的 UI。我可以将 spring 的东西注入我的 Vaadin 应用程序,但它会存储在会话中。有小费吗?
顺便问一下,您如何在 Vaadin 论坛上发帖?我找不到发布按钮或注册方式:)
我的建议:
TreeTable
- 请参阅问题 #9516)你试过这个http://vaadin.com/directory#addon/enterprise-app。这个附加组件使用 spring 和 hibernate。
似乎 Vaadin 的书涵盖了这个问题。他们推荐的解决方案是使用 ThreadLocal 来存储 Service 对象。ThreadLocal 在 Application 类的 transactionStart 和 transactionEnd 中被初始化和销毁。
Vaadin 书中更详细的说明:http: //vaadin.com/book/-/page/advanced.global.html
我将休眠与 Vaadin 一起使用。我的主要应用程序类有一个会话工厂方法:
public Session getSession() {
Session currentSession = HibernateUtil.getSessionFactory()
.getCurrentSession();
if(!currentSession.getTransaction().isActive()) {
currentSession.beginTransaction();
}
return currentSession;
}
每个需要持久化任何内容的类都将使用对主应用程序的引用,然后获取一个会话。
然后我有一个使用 HQL 命名查询的服务层,然后将该数据作为列表返回。
public List<DataClass> getEntriesforDate(Date date, Integer key) {
return mainApp.getSession().getNamedQuery(DataClass.NAMEDQUERY)
.setParameter("key", key).list();
}
为了保存,您只需将一个 ORM 类映射到一个表,您填充该类的一个实例,然后使用合并来持久化对象:
getSession().merge(o);
这是来自 Vaadin Wiki 的详细解释:
在 Vaadin 中,持久性数据不会存储在您的会话中,因此您无需担心这一点。