【问题标题】:Java Swing + Hibernate + MavenJava Swing + Hibernate + Maven
【发布时间】:2014-05-11 18:55:03
【问题描述】:

我知道有很多关于如何在项目中使用 Swing + Hibernate 和 Maven 的信息,但我认为所有这些信息都已经过时了。 我只是尝试关注this,但我最终遇到了很多导入问题,很明显,新版本的 Hibernate-core 没有它在本教程时所拥有的一些类(当我看到了一个使用 Vector (-:) 的代码

问题是,是否可以使用最新版本的 Hibernate with 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

【问题讨论】:

    标签: java swing hibernate maven netbeans


    【解决方案1】:

    我尝试过/检查过的事情:

    如果您下载教程中描述的项目,然后检查 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 提供了一些见解,但有些部分让我不高兴: &lt;groupId&gt;unknown.binary&lt;/groupId&gt;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 一切正常。

    注意

    从上面的链接中可以看出,您有两个选择。您可以使用&lt;artifactId&gt;hibernate-entitymanager&lt;/artifactId&gt;&lt;artifactId&gt;hibernate-core&lt;/artifactId&gt;

    我相信这些参考资料可以提供一些答案:

    注意 2:
    我在org.hibernate.hql.internal.classic.ClassicQueryTranslatorFactory 上遇到了一些麻烦。为了构建项目,我不得不使用没有内部的版本。如果我确实使用了内部版本,则无法完成步骤Creating Hibernate Mapping Files and POJOs From a Database。我必须恢复为经典以完成该步骤并在最后将其更改回内部。

    希望以上所有内容对您有用。

    【讨论】:

    • 你好 zlinks !我对你的回答非常满意,看起来你已经为此付出了很多努力,我已经很感激了。我试图从不使用 maven 的链接下载并构建项目,但我不知道如何在 maven 项目中转换这个项目,所以我可以声明休眠库。我使用的是 NB 8.0,但是当我导入项目时,它抱怨它找不到一些休眠库(例如 HibernateException、Query 和 Session)。将环顾四周,看看我如何在 maven 项目中转换这个项目。
    • 谢谢伙计,搞定了...必须解决一些问题,但总的来说,您的帖子是一个救世主。不过,我还有一个问题,是否可以在不必手动进行所有映射的情况下完成所有这些操作?我想迁移到 Swing 的项目是一个 JSF 项目,它具有所有必要的注释以避免所有映射。感谢您的所有帮助!
    • 嗨,TW。我很高兴它对你有所帮助。我相信您可以从您的 JSF 项目中获取所有描述您的模型结构的带注释的类,并将它们按原样放入您的 Swing 应用程序中。然后,您可能需要更改项目的 xml 文件。尝试再次执行逆向工程步骤,但这次检查 JDK 5 language featuresEJB3 Annotations 以了解项目如何使用注释。
    猜你喜欢
    • 2013-01-09
    • 1970-01-01
    • 1970-01-01
    • 2018-11-22
    • 1970-01-01
    • 2017-03-17
    • 2017-03-09
    • 1970-01-01
    • 2023-04-08
    相关资源
    最近更新 更多