我在整个应用程序中使用了一个会话,但是我得到了错误:
线程"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];
...发票是Hibernate @Entity和@Table,它有InvoiceItems连接到它。
问题是:如何处理Swing JTables中的Hibernate会话以避免“可能的非线程安全访问会话”错误?
谢谢。
发布于 2013-05-05 22:52:08
TableModel#getValueAt()正在(或应该是)运行在事件分派线程(EDT)上。正如这里所讨论的,“每个线程/事务都应该从SessionFactory中获得自己的实例。”工厂线程可以通过TableModel更新EDT上的invokeLater()。
https://stackoverflow.com/questions/16387496
复制相似问题