[PersistenceUnit: ‹name›]: невозможно построить EntityManagerFactory

Как уже говорилось по теме, моя проблема в том, что EntityManagerFactory не может быть построен. Я использую Maven + Hibernate. Я подключаюсь к базе данных MySQL (<jdbc://mysql://localhost:3306/<dbname>).

Странно, что во время отладки в Eclipse все работает нормально. Но когда я создаю его с помощью сборки Maven, файл JAR выдает такую ​​​​ошибку. Я уже проверил файл манифеста, и все необходимые JAR-файлы были включены в Class-Path. Ниже приведена ошибка JAR, отображаемая в консоли:

===========================================================================

Feb 3, 2012 5:01:16 PM org.hibernate.annotations.common.Version <clinit>
INFO: HCANN000001: Hibernate Commons Annotations {4.0.1.Final}
Feb 3, 2012 5:01:16 PM org.hibernate.Version logVersion
INFO: HHH000412: Hibernate Core {4.0.1.Final}
Feb 3, 2012 5:01:16 PM org.hibernate.cfg.Environment <clinit>
INFO: HHH000206: hibernate.properties not found
Feb 3, 2012 5:01:16 PM org.hibernate.cfg.Environment buildBytecodeProvider
INFO: HHH000021: Bytecode provider name : javassist
Feb 3, 2012 5:01:16 PM org.hibernate.service.jdbc.connections.internal.DriverManagerConnectionProviderImpl configure
INFO: HHH000402: Using Hibernate built-in connection pool (not for production use!)
Feb 3, 2012 5:01:16 PM class <name>.<name>.<name> <name>
SEVERE: [ERROR]: [PersistenceUnit: <name>] Unable to build EntityManagerFactory
[ERROR]: [PersistenceUnit: <name>] Unable to build EntityManagerFactory

===========================================================================

ниже мой файл persistence.xml:

<persistence xmlns="http://java.sun.com/xml/ns/persistence"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/persistence
http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd"
version="1.0">
<persistence-unit name="<name>">
<provider>org.hibernate.ejb.HibernatePersistence</provider>
<class>classname</class>
<properties>
<!-- <property name="hibernate.ejb.cfgfile" value="/classifyPE.cfg.xml"/> -->
<property name="hibernate.connection.driver_class" value="com.mysql.jdbc.Driver" />
<property name="hibernate.connection.password" value="<value>" />
<property name="hibernate.connection.url" value="jdbc:mysql://localhost:3306/<name>" />
<property name="hibernate.connection.username" value="root" />
<property name="hibernate.dialect" value="org.hibernate.dialect.MySQLDialect" />
</properties>
</persistence-unit>
</persistence>

===========================================================================

Что я здесь делаю неправильно? Или чего мне не хватает?
Как уже упоминалось, он работает над отладкой. Но когда я упаковываю его в JAR (со всеми необходимыми JAR, присутствующими в папке libs), это не так.


person jaysonpryde    schedule 03.02.2012    source источник
comment
Я думаю, в вашей консоли есть нечто большее, верно? Может быть, подробную трассировку стека?   -  person tartak    schedule 03.02.2012
comment
Под данным исключением должно быть больше журналов, пожалуйста, опубликуйте их.   -  person prajeesh kumar    schedule 03.02.2012


Ответы (4)


добавьте это в свой xml-файл

<property name="javax.persistence.validation.mode">none</property>
person James    schedule 02.05.2012

<class>classname</class>

Я подозреваю, что ваша сущность не называется classname, поэтому попробуйте указать полное имя пути к классу (например, foo.bar.realclassname, где realclassname является именем вашего класса сущности).

person AlexS    schedule 03.02.2012
comment
Ваши параметры базы данных (также известные как пользователь, пароль и т. д.) жестко закодированы в файле persistence.xml или вы используете какие-либо заполнители? Я имею в виду: вы уверены, что используются одни и те же параметры? - person AlexS; 03.02.2012

Файл persistence.xml должен находиться в папке META-INF в корне банки. Проверьте, есть оно или нет. Я предполагаю, что это чисто проблема, связанная с classpath.

person Abhinav Sarkar    schedule 03.02.2012
comment
Да он уже в папке META-INF..вместе с файлом манифеста - person jaysonpryde; 03.02.2012

Попробуйте переименовать свой блок сохранения. Это важно, поскольку имя используется для идентификации единицы сохраняемости, связанной с каждым EntityManager.

So:

<persistence-unit name="<name>">

следует заменить на (например):

<persistence-unit name="myUnit">
person ŁukaszBachman    schedule 03.02.2012
comment
Сделайте то же самое с <value> для пароля BD. - person ŁukaszBachman; 03.02.2012
comment
Это просто фиктивные единицы... Я не публиковал фактическое имя/значение, но оно уже - person jaysonpryde; 03.02.2012