Я знаю, что есть много информации, объясняющей, как использовать Swing + Hibernate и Maven в проекте, но я думаю, что вся эта информация устарела. Я просто попытался следовать этому, и у меня просто возникли проблемы с импортом, поскольку, по-видимому, новые версии Hibernate-core не имеют некоторых классов, которые были у него во время этого урока (я немного смеюсь, когда вижу код с использованием Vector (-:)
Вопрос в том, можно ли создать проект, используя последние версии Hibernate с Swing? Есть ли у кого-нибудь информация о том, как это сделать, не с 3 лет назад?
Проблемы, которые у меня были:
1 - Не удалось получить запрос HQL для работы с Netbeans... он жалуется на
<property name="hibernate.query.factory_class">org.hibernate.hql.internal.classic.ClassicQueryTranslatorFactory</property>
Не могу найти его.. попробовал другие варианты, но не повезло (я действительно не забочусь об этом)
2 - При запуске кода он жалуется на
Caused by: java.lang.ClassNotFoundException: org.hibernate.util.DTDEntityResolver
Which is a package from early days of hibernate.
Поблагодарите за помощь, даже указывая на хорошую документацию...
ура
ОБНОВЛЕНИЕ: Трассировка стека
--- exec-maven-plugin:1.2.1:exec (default-cli) @ SwingProject ---
SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder".
SLF4J: Defaulting to no-operation (NOP) logger implementation
SLF4J: See http://www.slf4j.org/codes.html#StaticLoggerBinder for further details.
Apr 01, 2014 4:48:07 PM org.hibernate.Version logVersion
INFO: HHH000412: Hibernate Core {4.3.4.Final}
Apr 01, 2014 4:48:07 PM org.hibernate.cfg.Environment <clinit>
INFO: HHH000206: hibernate.properties not found
Apr 01, 2014 4:48:07 PM org.hibernate.cfg.Environment buildBytecodeProvider
INFO: HHH000021: Bytecode provider name : javassist
Initial SessionFactory creation failed.java.lang.NoClassDefFoundError: org/hibernate/util/DTDEntityResolver
Exception in thread "AWT-EventQueue-0" java.lang.ExceptionInInitializerError
at padaria.util.NewHibernateUtil.<clinit>(NewHibernateUtil.java:30)
at br.com.vaast.main.AdminMain.executeHQLQuery(AdminMain.java:43)
at br.com.vaast.main.AdminMain.runQueryBasedOnFirstName(AdminMain.java:34)
at br.com.vaast.main.AdminMain.jButton1ActionPerformed(AdminMain.java:206)
at br.com.vaast.main.AdminMain.access$200(AdminMain.java:21)
at br.com.vaast.main.AdminMain$3.actionPerformed(AdminMain.java:120)
at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:2018)
at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2341)
at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:402)
at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:259)
at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:252)
at java.awt.Component.processMouseEvent(Component.java:6505)
at javax.swing.JComponent.processMouseEvent(JComponent.java:3320)
at java.awt.Component.processEvent(Component.java:6270)
at java.awt.Container.processEvent(Container.java:2229)
at java.awt.Component.dispatchEventImpl(Component.java:4861)
at java.awt.Container.dispatchEventImpl(Container.java:2287)
at java.awt.Component.dispatchEvent(Component.java:4687)
at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4832)
at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4492)
at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4422)
at java.awt.Container.dispatchEventImpl(Container.java:2273)
at java.awt.Window.dispatchEventImpl(Window.java:2719)
at java.awt.Component.dispatchEvent(Component.java:4687)
at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:735)
at java.awt.EventQueue.access$200(EventQueue.java:103)
at java.awt.EventQueue$3.run(EventQueue.java:694)
at java.awt.EventQueue$3.run(EventQueue.java:692)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:87)
at java.awt.EventQueue$4.run(EventQueue.java:708)
at java.awt.EventQueue$4.run(EventQueue.java:706)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:705)
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:242)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:161)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:150)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:146)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:138)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:91)
Caused by: java.lang.NoClassDefFoundError: org/hibernate/util/DTDEntityResolver
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClass(ClassLoader.java:800)
at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
at java.net.URLClassLoader.defineClass(URLClassLoader.java:449)
at java.net.URLClassLoader.access$100(URLClassLoader.java:71)
at java.net.URLClassLoader$1.run(URLClassLoader.java:361)
at java.net.URLClassLoader$1.run(URLClassLoader.java:355)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:354)
at java.lang.ClassLoader.loadClass(ClassLoader.java:425)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)
at java.lang.ClassLoader.loadClass(ClassLoader.java:358)
at org.hibernate.cfg.Configuration.reset(Configuration.java:353)
at org.hibernate.cfg.AnnotationConfiguration.reset(AnnotationConfiguration.java:289)
at org.hibernate.cfg.Configuration.<init>(Configuration.java:289)
at org.hibernate.cfg.Configuration.<init>(Configuration.java:293)
at org.hibernate.cfg.AnnotationConfiguration.<init>(AnnotationConfiguration.java:168)
at padaria.util.NewHibernateUtil.<clinit>(NewHibernateUtil.java:26)
... 41 more
Caused by: java.lang.ClassNotFoundException: org.hibernate.util.DTDEntityResolver
at java.net.URLClassLoader$1.run(URLClassLoader.java:366)
at java.net.URLClassLoader$1.run(URLClassLoader.java:355)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:354)
at java.lang.ClassLoader.loadClass(ClassLoader.java:425)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)
at java.lang.ClassLoader.loadClass(ClassLoader.java:358)
... 59 more
Вещи Ive пробовали/проверяли:
Если вы загрузите проект, описанный в учебнике, а затем проверив pom.xml, вы увидите, что используемые библиотеки довольно старые. Я считаю, что проект построен с более старой версией Netbeans. Если вы проверите этот учебник: https://netbeans.org/kb/docs/java/hibernate-java-se.html, который на самом деле один и тот же, но без использования maven, упоминается, что "NetBeans IDE 7.4 и ранее в комплекте Hibernate 3 ".
Если вы попытаетесь следовать руководству, которое строит проект без использования Maven: https://netbeans.org/kb/docs/java/hibernate-java-se.html, и вы работаете с NetBeans 8.0, вы получите изображение нужны библиотеки Hibernate 4.x. Это связано с тем, что IDE по умолчанию поставляется в комплекте с библиотеками Hibernate 4.x. Возвращаясь и создав проект с Maven, на этот раз я получил следующее в моем pom.xml
<repositories>
<repository>
<id>unknown-jars-temp-repo</id>
<name>A temporary repository created by NetBeans for libraries and jars it could not identify. Please replace the dependencies in this repository with correct ones and delete this repository.</name>
<url>file:${project.basedir}/lib</url>
</repository>
</repositories>
<dependencies>
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-entitymanager</artifactId>
<version>4.1.8.Final</version>
</dependency>
<dependency>
<groupId>unknown.binary</groupId>
<artifactId>hibernate-jpa-2.0-api-1.0.1.Final</artifactId>
<version>SNAPSHOT</version>
</dependency>
<dependency>
<groupId>unknown.binary</groupId>
<artifactId>mysql-connector-java-5.1.23-bin</artifactId>
<version>SNAPSHOT</version>
</dependency>
</dependencies>
Решение, которое сработало для меня.
Вышеупомянутый pom.xml дал некоторое представление, но есть некоторые части, которые сделали меня несчастным: <groupId>unknown.binary</groupId>
и temporary repository
.
Поэтому я начал искать и, наконец, здесь: http://hibernate.org/orm/documentation/getting-started/, и здесь я получил то, что мне было нужно: http://hibernate.org/orm/documentation/getting-started/.
Я изменил свой pom.xml на:
<dependencies>
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-entitymanager</artifactId>
<version>4.3.5.Final</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.30</version>
</dependency>
Все отлично работает с последней версией Hibernate.
ПРИМЕЧАНИЕ.
как видно из приведенных выше ссылок, у вас есть два варианта. Вы можете использовать <artifactId>hibernate-entitymanager</artifactId>
или <artifactId>hibernate-core</artifactId>
.
Я считаю, что эти ссылки могут дать некоторые ответы:
ЗАМЕТКА 2:
У меня были проблемы с org.hibernate.hql.internal.classic.ClassicQueryTranslatorFactory
. Чтобы построить проект, мне пришлось использовать версию без внутренней. Если бы я использовал внутреннюю версию, то шаг " Creating Hibernate Mapping Files and POJOs From a Database
не мог быть завершен". Я должен был вернуться к классике, чтобы завершить шаг и изменить его на внутреннее в конце.
Надеюсь, что все вышесказанное вам полезно.