Иногда получение PersistenceException: нет поставщика сохраняемости для EntityManager - PullRequest
0 голосов
/ 31 января 2012

Есть много вопросов об этом PersistenceException, но я не видел некоторых, где конкретная строка кода вызывает это исключение только иногда (но не случайно: -).

Итак, у вас есть идея, почему когда-то мое простое приложение находит провайдера нормально, а потом - нет?

IDE NetBeans 7.0.1, приложение на платформе NetBeans, использующее библиотеку постоянных ссылок и встраивание Derby.

Я пытался это учебное пособие по CRUD-способностям Geertjan , но я получаю исключение PersistenceException при сохранении новой поездки:

at javax.persistence.Persistence.createEntityManagerFactory(Unknown Source)
at javax.persistence.Persistence.createEntityManagerFactory(Unknown Source)
at org.mv.mm.api.TripSearchDAO.createTransactionalEntityManager(TripSearchDAO.java:61)
at org.mv.mm.api.TripSearchDAO.create(TripSearchDAO.java:41)
at org.mv.mm.api.TripQuery$3.create(TripQuery.java:69)
[catch] at org.mv.mm.api.TripType.create(TripType.java:64)

Но в "поисковом" методе класса DAO есть и этот закрытый метод createTransactionalEntityManager, и EntityManager правильно создан. Почему это может быть?


Хорошо, проблема такая же, как и у многих других здесь (ну, я не решил ее, но завтра попробую снова). Это терпит неудачу каждый раз. Я пропустил блок try catch, поэтому не заметил исключения. Это происходит каждый раз, когда вызывается Persistence.createEntityManagerFactory («TripPU»). CreateEntityManager ().

Ответы [ 2 ]

0 голосов
/ 02 февраля 2012

И настоящее решение настоящей проблемы также найдено: действительно проверяйте в этих случаях имя вашего модуля персистентности в файле persistence.xml (например, TripPU), если оно является правильным для вызывающего Persistence.createEntityManagerFactory ("TripPU").createEntityManager ();

PU не совпадает с сущностью DB, поэтому учебники могут вас запутать, когда вы попытаетесь сделать немного другой пример (разные таблицы и т. д.).

0 голосов
/ 02 февраля 2012

На мой взгляд, на этот вопрос дан ответ: причина, по которой исключение PersistenceException встречается только иногда, заключается в том, что в другой раз, когда кажется, что все в порядке, проблемная строка:

em = Persistence.createEntityManagerFactory("TripPU").createEntityManager();

вызывается из другого класса из блока try ... catch, где блок "catch" ничего не делает.Так что я не заметил, что он всегда терпит неудачу.

...