【问题标题】:How to handle Hibernate session in JTable (Swing)?如何在 JTable (Swing) 中处理 Hibernate 会话?
【发布时间】:2013-05-05 18:08:16
【问题描述】:

我在整个应用程序中使用一个会话,但出现错误:

线程“Thread-9”org.hibernate.AssertionFailure 中的异常: 对会话的可能的非线程安全访问

这是偶然发生的,并非总是如此。

在 JTable 模型中我有这个:

public Object getValueAt(int rowIndex, int columnIndex) {
        Invoice i = invoices.get(rowIndex);
        Object[] values = new Object[] { i.getInvoiceId(), i.getIdent(),
                i.getTotalExclVat(), i.getTotalInclVat(), i.getIssueDate(),
                i.getTaxDate(), i.getDueDate(), i.getPayType(),
                i.getWeight(), i.getSupplier().getName(),
                i.getInvoiceItems().size() };
        return values[columnIndex];
...

Invoice 是 Hibernate @Entity 和 @Table,它有 InvoiceItems 连接到它。

问题是:我应该如何处理 Swing JTables 中的 Hibernate Session 以避免“可能的非线程安全访问会话”错误?

谢谢。

【问题讨论】:

  • 您没有提供足够的代码,因此我们可以准确地告诉您问题所在。
  • 问题是我是否应该在 JTables (getSessionFactory().openSession()) 之间共享一个会话。我应该吗?

标签: java swing hibernate jtable


【解决方案1】:

TableModel#getValueAt() 正在(或应该)在event dispatch thread (EDT) 上运行。正如here 所讨论的,“每个线程/事务都应该从SessionFactory 获取自己的实例。”工厂线程可以通过invokeLater()更新EDT上的TableModel

【讨论】:

    猜你喜欢
    • 2019-10-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-14
    • 1970-01-01
    • 2019-08-20
    • 2015-03-13
    相关资源
    最近更新 更多