2011-12-16 2 views
5

В документации для EntityManager.persist() указано, что оно будет .EntityManager.contains() возвращает false после сохранения()

Сохраняет объект в базе данных, но когда я вызываю метод EntityManager.contains(), чтобы проверить, управляется ли объект, который я только сохранял, он возвращает false.

Я просто хочу знать, почему это происходит? Может быть, есть что-то, что я не мог сделать, или что-то, что я забыл?

Предложения будут оценены: D

+1

Можете ли вы опубликовать свой код, в котором вы сохраняете и читаете контент EntityManager? –

ответ

3

Это действительно странно. Согласно Расположение The Sun EJB3 spec:

Метод может быть использован, чтобы определить, удалось ли предприятие экземпляр в текущем контексте сохранения состояния.

Метод contains возвращает истину:

  • Если объект был получен из базы данных, и не был удален или отдельно.
  • Если экземпляр объекта является новым и метод persist был вызван в сущности, или операция persist была каскадирована на него.

Метод contains возвращает ложь:

  • Если экземпляр отсоединяется.
  • Если на объект был вызван метод remove, или операция удаления была каскадирована на него.
  • Если экземпляр является новым, и метод persist не был вызван в сущности, или операция persist не была каскадирована до .

Следует отметить, что эффект от каскадного сохраняются или удалить, сразу видно к содержит метод, в то время как фактическое вставки или удаления представления базы данных для объекта может быть отложена до конца сделки ,

Вы звоните contains в той же сделке?

+0

Я действительно верю, что я в той же транзакции, но я не уверен, потому что я не определяю, где должна начинаться транзакция и фиксировать, потому что я оставил ее в контейнере. Но я думаю, почему я не получаю постоянный объект из-за первичного ключа. Один из основных ключей должен поступать из базы данных, и я не могу получить это. Во всяком случае, я просто попробую другой подход, чтобы это сделать. Спасибо за информацию, хотя: D –

0

мы сделали некоторое обходное решение, а не продолжали> обновлять, мы просто взяли автогенерированный ключ из хранилища данных и назначили его вручную ключевым полям объекта, а затем продолжили его.

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