2014-02-02 6 views
1

Я пытаюсь настроить Hibernate 4 в проекте Maven. Это не работает, и это сводит меня с ума.Hibernate 4: ViolatedConstraintNameExtracter exception

Я получаю это исключение:

java.lang.NoClassDefFoundError: org/hibernate/exception/ViolatedConstraintNameExtracter 

Эти зависимости объявлены в файле pom.xml:

<dependency> 
    <groupId>org.hibernate</groupId> 
    <artifactId>hibernate-core</artifactId> 
    <version>4.3.1.Final</version> 
</dependency> 
<dependency> 
    <groupId>org.xerial</groupId> 
    <artifactId>sqlite-jdbc</artifactId> 
    <version>3.7.2</version> 
</dependency> 
<dependency> 
    <groupId>org.hibernate.dialect</groupId> 
    <artifactId>sqlite-dialect</artifactId> 
    <version>0.1.0</version> 
    <scope>provided</scope> 
</dependency> 

Это мой файл конфигурации Hibernate:

<?xml version='1.0' encoding='UTF-8'?> 
<!DOCTYPE hibernate-configuration PUBLIC 
"-//Hibernate/Hibernate Configuration DTD 3.0//EN" 
"http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd"> 
<hibernate-configuration> 
<session-factory> 
    <property name="hibernate.connection.driver_class">org.sqlite.JDBC</property> 
    <property name="hibernate.connection.password"></property> 
    <property name="hibernate.connection.url">jdbc:sqlite:test.db</property> 
    <property name="hibernate.connection.username"></property> 
    <property name="hibernate.dialect">org.hibernate.dialect.SQLiteDialect</property> 
    <property name="hibernate.hbm2ddl.auto">update</property> 
</session-factory> 
</hibernate-configuration> 

И это «аварийный» код:

Configuration configuration = new Configuration(); 
configuration.configure(); 
serviceRegistry = new StandardServiceRegistryBuilder().applySettings(configuration.getProperties()).build();   
sessionFactory = configuration.buildSessionFactory(serviceRegistry); 

У меня есть только тестовая модель под названием «Пользователь» и украшена аннотациями Hibernate.

Можете ли вы мне помочь? Приветствия.

UPDATE: Stack след

Initial SessionFactory creation failedjava.lang.NoClassDefFoundError: org/hibernate/exception/ViolatedConstraintNameExtracter 
Exception in thread "main" java.lang.ExceptionInInitializerError 
at com.matteopacini.RestaurantManager.HibernateUtil.<clinit>(HibernateUtil.java:27) 
at com.matteopacini.RestaurantManager.App.main(App.java:14) 
Caused by: java.lang.NoClassDefFoundError: org/hibernate/exception/ViolatedConstraintNameExtracter 
at java.lang.Class.forName0(Native Method) 
at java.lang.Class.forName(Unknown Source) 
at org.hibernate.boot.registry.classloading.internal.ClassLoaderServiceImpl.classForName(ClassLoaderServiceImpl.java:242) 
at org.hibernate.boot.registry.selector.internal.StrategySelectorImpl.selectStrategyImplementor (StrategySelectorImpl.java:125) 
at org.hibernate.boot.registry.selector.internal.StrategySelectorImpl.resolveDefaultableStrategy(StrategySelectorImpl.java:155) 
at org.hibernate.boot.registry.selector.internal.StrategySelectorImpl.resolveStrategy(StrategySelectorImpl.java:136) 
at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.constructDialect(DialectFactoryImpl.java:78) 
at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:68) 
at org.hibernate.engine.jdbc.internal.JdbcServicesImpl.configure(JdbcServicesImpl.java:165) 
at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.configureService(StandardServiceRegistryImpl.java:89) 
at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:206) 
at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:178) 
at org.hibernate.cfg.Configuration.buildTypeRegistrations(Configuration.java:1885) 
at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1843) 
at com.matteopacini.RestaurantManager.HibernateUtil.<clinit>(HibernateUtil.java:21) 
... 1 more 
Caused by: java.lang.ClassNotFoundException: org.hibernate.exception.ViolatedConstraintNameExtracter 
at java.net.URLClassLoader$1.run(Unknown Source) 
at java.net.URLClassLoader$1.run(Unknown Source) 
at java.security.AccessController.doPrivileged(Native Method) 
at java.net.URLClassLoader.findClass(Unknown Source) 
at java.lang.ClassLoader.loadClass(Unknown Source) 
at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source) 
at java.lang.ClassLoader.loadClass(Unknown Source) 
... 16 more 
+0

Что трассировки стека? Вы уверены, что sqlite-dialect, который я не нашел на Maven central, совместим с недавним Hibernate 4.3.1? Не найденный класс находится в org.hibernate.exception.spi в Hibernate 4, но был в org.hibernate.exception в Hibernate 3.6. –

+0

Я отправил трассировку стека. Репозиторий sqlite-dialect: https://github.com/gwenn/sqlite-dialect. Я не знаю, совместим ли это, но это единственный обновленный. –

+0

Вам не хватает jar в пути к классам или имеет 2 разных версии. –

ответ

2

Диалект вы используете не совместим с Hibernate 4. См https://github.com/gwenn/sqlite-dialect/blob/master/src/main/java/org/hibernate/dialect/SQLiteDialect.java: он использует org.hibernate.exception.ViolatedConstraintNameExtracter, который был перемещен в org.hibernate.exception.spi.ViolatedConstraintNameExtracter в Hibernate 4.

+0

Спасибо! Это сводило меня с ума: D –

1

В спящем 4.X класс ViolatedConstraintNameExtracter был перемещен из пакета org.hibernate.exception в org.hibernate.exception.spi (JavaDoc). В сообщении об ошибке указано, что org/hibernate/exception/ViolatedConstraintNameExtracter не найден.

Это означает, что у вас есть хотя бы одна библиотека в вашем пути к среде выполнения, которая запрашивает старый класс 3.X Hibernate. Вы должны проверить зависимости, используя Maven dependency plugin или Eclipse.