Код «HelloJPA» (ниже) пытается хранить сотрудника в хранилище данных. Однако, любая попытка чтения сохраненное объект после совершения (ресурсов местного) сделки вознаграждается с «IllegalStateException»:Начинающий вопрос: базовая идиома ввода для JPA?
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) не затрагивает это специально, и образцы кода, которые я нашел, которые используют локальные транзакции ресурсов, никогда, кажется, не пытаются прочитать объект после совершения ... Но, безусловно, должно быть просто тривиально простым способом сделать это??
Заранее благодарю за помощь/указатели!
Во-первых, действительно ли созданный сотрудник фактически сохранялся в БД? Во-вторых, как выглядит ваш сотрудник Entity? Использование объекта после того, как локальная транзакция ресурса будет действительной, нужно сделать. – Rick
Эй, Рик, спасибо за ваш комментарий. Yup, сотрудник добавляется в хранилище данных. Конечно, это пример игрушки, так что «работник» выглядит неизлечимо упрощенно: @Entity класс Сотрудник общественного реализует Serializable { частных статический окончательный длинный serialVersionUID = ...; @Id private String id; @Basic приватное название строки; @Basic частное положение строки; // Геттеры и сеттеры опущены Помогает ли это? Заранее спасибо! – jucar
Не могли бы вы опубликовать IllegalStateException? Рик прав, это должно сработать. – Mike