Вопрос новичка: основная идиома вставки для JPA? - PullRequest
2 голосов
/ 17 марта 2010

Мой код «HelloJPA» (ниже) пытается сохранить Employee в хранилище данных. Однако любая попытка прочитать постоянный объект после совершения транзакции (локального ресурса) вознаграждается «IllegalStateException»:

Employee employee = ...
EntityManagerFactory factory =
    Persistence.createEntityManagerFactory( "HelloJPA", System.getProperties() );
EntityManager manager = factory.createEntityManager();
EntityTransaction transaction = manager.getTransaction();
try {
    transaction.begin();
    manager.persist( employee );
    transaction.commit();
} finally {
    if (transaction.isActive()) {
        transaction.rollback();
    }
    manager.close();
}
System.out.println("Employee id == " + employee.getId() ); //<< IllegalStateException

ОК, я думаю, менеджер завладел моим новым назначенным объектом работника, и он стал недоступен, как только я совершил транзакцию. Но тогда, какова общая идиома для реализации этой простой операции, то есть записи объекта полностью в хранилище данных при сохранении доступа к нему только для чтения? Документация (учебные пособия или ссылки на API) конкретно не затрагивают эту проблему, и примеры кода, которые я обнаружил, использующие локальные транзакции с ресурсами, никогда не пытаются прочитать объект после фиксации ... Но, безусловно, должен быть тривиально простой способ сделать это ??

Заранее спасибо за любую помощь / указатели на это!

1 Ответ

0 голосов
/ 10 августа 2010

Ваш employee отключается после закрытия менеджера сущностей, но нет ничего, что запрещало бы доступ к аннотированному свойству Id отсоединенной сущности. Итак, ваш код верен и работает с Hibernate и EclipseLink. Возможно, найдите в Jira OpenJPA существующую проблему или откройте новую.

...