2013-05-05 2 views
1

Я использую один сеанс через все приложение, но я получаю сообщение об ошибке:Как обрабатывать сеанс Hibernate в JTable (Swing)?

Exception in thread "Thread-9" org.hibernate.AssertionFailure: possible non-threadsafe access to the session

Это происходит случайно, не всегда.

В 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 подсоединенных к нему.

Вопрос: Как я должен обрабатывать сеанс Hibernate в Swing JTables, чтобы избежать «возможного небезопасного доступа к сеансу»?

Спасибо.

+0

Вы не предоставили достаточно кода, чтобы мы могли точно рассказать вам, в чем проблема. –

+0

Вопрос в том, должен ли я делиться одним сеансом через JTables (getSessionFactory(). OpenSession()) или нет. Нужно ли мне? – Xdg

ответ

2

TableModel#getValueAt() (или должно быть) работает на event dispatch thread (EDT). Как обсуждалось here, «каждый поток/транзакция должна получить свой собственный экземпляр из SessionFactory». Заводская нить может обновлять TableModel по EDT через invokeLater().

Смежные вопросы