如何在JTable(Swing)中处理Hibernate会话?

时间:2013-05-05 18:08:16

标签: java swing hibernate jtable

我在整个应用程序中使用了一个Session,但是我收到了错误:

  

线程“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 JTable中的Hibernate Session以避免'可能的非线程安全访问会话'错误?

感谢。

1 个答案:

答案 0 :(得分:2)

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