Java 瓦丁持久性

Java 瓦丁持久性,java,spring,vaadin,Java,Spring,Vaadin,我在学瓦丁。我真的很困惑如何使用持久性进行任何类型的应用程序开发,因为如果我有一个对我的服务层对象的引用,它们会存储在会话中,我真的不希望这样。持久性的东西就是不能序列化 我的情况是,我已经有了一个使用Spring的应用程序,我正在用Vaadin为它创建一个新的UI。我可以将spring内容注入到我的Vaadin应用程序中,但它会存储在会话中。有什么建议吗 顺便问一下,你是如何在瓦丁论坛上发帖的?我找不到post按钮或注册方法:)在Vaadin中,持久性数据没有存储在会话中,因此您不必担心这一点

我在学瓦丁。我真的很困惑如何使用持久性进行任何类型的应用程序开发,因为如果我有一个对我的服务层对象的引用,它们会存储在会话中,我真的不希望这样。持久性的东西就是不能序列化

我的情况是,我已经有了一个使用Spring的应用程序,我正在用Vaadin为它创建一个新的UI。我可以将spring内容注入到我的Vaadin应用程序中,但它会存储在会话中。有什么建议吗


顺便问一下,你是如何在瓦丁论坛上发帖的?我找不到post按钮或注册方法:)

在Vaadin中,持久性数据没有存储在会话中,因此您不必担心这一点。

似乎Vaadin的书涵盖了这个问题。他们推荐的解决方案是使用ThreadLocal来存储服务对象。ThreadLocal在应用程序类的transactionStart和transactionEnd中初始化和销毁


Vaadin手册中有更详细的说明:

我将hibernate与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();
}
以下是Vaadin Wiki的详细解释:

我的建议:

  • 将容器定义为仅包含表示数据。不要保留从表示对象到持久对象的任何直接引用
  • 定义一个“加载”操作,该操作在事务中加载持久数据对象,并将其转换为支持容器的相应表示对象
  • 将所有容器设置为只读(遵循模型-视图-控制器模式:容器就是模型)
  • 根据需要设置通知/触发器,以便在基础持久性数据更改时重新加载容器
  • 为了实现可伸缩性,请设计或使用知道如何延迟加载的容器等,这样您就不会一次填充整个容器(注意:
    TreeTable
    -请参阅)
您试过这个吗。
此附加组件使用spring和hibernate。

您必须注册才能在论坛上发布问题。单击页面顶部的“Join Vaadin”,它将带您进入登录屏幕,然后单击“创建帐户”并注册。登录并登录后,转到论坛,选择一个类别。在该页面上,搜索框旁边有一个“发布新线程”按钮。哦,没有看到Join Vaadin文本。它太小了:)你可以使用@Configurable,在这里看我自己的描述:这些服务可以被标记为瞬态,并在反序列化后再次自动连接。对不起,我不明白。持久性数据如何不存储在会话中?如果应用程序存储在会话中,并且我的应用程序引用了EntityManager(JPA)或datasource,那么它们存储在哪里呢?这是一个老问题,现在我又读了一遍,难怪我一直在得到我没有的问题的答案:)我还不完全清楚我的实际问题是什么,所以我的问题是:我的实际问题“装载“你刚才说的手术。为了加载或持久化数据,我有一个MyObjectRepository来处理持久性和事务。要加载或持久化对象,我必须在我的Vaadin类中引用这个MyObjectRepository。MyObjectRepository的问题是它无法序列化,因为它有DB连接和所有其他东西。如果您使用的是Spring,请尝试加载项。嘿,这似乎是一个很好的库!我得试试。
getSession().merge(o);