【问题标题】:JPA 2.0, hibernate 3.5, jars & persistence.xml locationJPA 2.0、hibernate 3.5、jar 和 persistence.xml 位置
【发布时间】:2011-02-09 09:34:21
【问题描述】:

我正在使用 hibernate 3.5 和 JPA 2.0 构建一个桌面应用程序。

我有两个罐子,

定义每个实体和 DAO 的 lib 包看起来像这样:

org.my.package.models
org.my.package.models.dao
org.my.package.models.utils

在 org.my.package.utils 中,我定义了用于获取 EM 和 EMF 实例的 hibernate 实用程序类,这意味着该库绑定到一个持久性单元名称,但现在这不是问题(无论如何你可以向我推荐一个更好的管理方法)

第二个jar的构建如下:

org.my.package.app

META-INF 是在项目的根目录中定义的,这意味着在我的 jar 中我可以直接在根目录中找到这个目录:

META-INF/
META-INF/persistence.xml
org/
org/my/
...
org/my/package/app/Main.class

当我运行该应用程序时,hibernate 无法找到 persistence.xml,它会抛出一个异常,例如“找不到 PersistenceUnitName 的包或类”。

SLF4J: The requested version 1.5.11 by your slf4j binding is not compatible with [1.5.5, 1.5.6, 1.5.7, 1.5.8]
SLF4J: See http://www.slf4j.org/codes.html#version_mismatch for further details.
3 [main] INFO org.hibernate.cfg.annotations.Version - Hibernate Annotations 3.5.0-Final
25 [main] INFO org.hibernate.cfg.Environment - Hibernate 3.5.0-Final
28 [main] INFO org.hibernate.cfg.Environment - hibernate.properties not found
33 [main] INFO org.hibernate.cfg.Environment - Bytecode provider name : javassist
41 [main] INFO org.hibernate.cfg.Environment - using JDK 1.4 java.sql.Timestamp handling
153 [main] INFO org.hibernate.annotations.common.Version - Hibernate Commons Annotations 3.2.0.Final
160 [main] INFO org.hibernate.ejb.Version - Hibernate EntityManager 3.5.0-Final
Exception in thread "main" java.lang.ExceptionInInitializerError
        at Main.main(Main.java:171)
Caused by: javax.persistence.PersistenceException: [PersistenceUnit: PMMPU] class or package not found
        at org.hibernate.ejb.Ejb3Configuration.addNamedAnnotatedClasses(Ejb3Configuration.java:1316)
        at org.hibernate.ejb.Ejb3Configuration.addClassesToSessionFactory(Ejb3Configuration.java:1094)
        at org.hibernate.ejb.Ejb3Configuration.configure(Ejb3Configuration.java:981)
        at org.hibernate.ejb.Ejb3Configuration.configure(Ejb3Configuration.java:275)
        at org.hibernate.ejb.Ejb3Configuration.configure(Ejb3Configuration.java:359)
        at org.hibernate.ejb.HibernatePersistence.createEntityManagerFactory(HibernatePersistence.java:55)
        at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:48)
        at dil.tal.polymarmots.utils.HibernateUtil.getEmf(HibernateUtil.java:45)
        at dil.tal.polymarmots.utils.HibernateUtil.getEm(HibernateUtil.java:54)
        at dil.tal.polymarmots.utils.HibernateUtil.getMotDAOImpl(HibernateUtil.java:115)
        at dil.tal.polymarmots.models.Mot.<clinit>(Mot.java:30)
        ... 1 more
Caused by: java.lang.ClassNotFoundException: model.Extrait
        at java.net.URLClassLoader$1.run(URLClassLoader.java:200)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.net.URLClassLoader.findClass(URLClassLoader.java:188)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:307)
        at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:252)
        at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:320)
        at java.lang.Class.forName0(Native Method)
        at java.lang.Class.forName(Class.java:247)
        at org.hibernate.util.ReflectHelper.classForName(ReflectHelper.java:170)
        at org.hibernate.ejb.Ejb3Configuration.classForName(Ejb3Configuration.java:1232)
        at org.hibernate.ejb.Ejb3Configuration.addNamedAnnotatedClasses(Ejb3Configuration.java:1304)
        ... 11 more

我在 Google 上搜索了一些关于 the problem 的信息,但我无法正确组织源代码。

有什么帮助吗?

【问题讨论】:

  • 您确定该消息表示未找到文件,而不是文件中的问题?
  • 发布 exact 异常(和跟踪)和您的 persistence.xml

标签: java hibernate orm jpa-2.0 persistence.xml


【解决方案1】:

找不到类或包消息不言自明:找不到类或包——不是persistence.xml——正如异常原因所暗示的那样:

Caused by: java.lang.ClassNotFoundException: model.Extrait

model.Extrait 实体不反映您正在显示的包装,但很可能在您的 persistence.xml 中声明(您没有显示)但不存在于类路径中。

【讨论】:

  • 这个错误让我明白了我不理解 Java Exceptions 输出...
  • @phmr 我们都从错误中吸取教训 :) 有些人称一连串的错误为“经验”。
  • 帕斯卡,如果这句话是真的,那我有很多经验。由于这个答案,在我的代码中发现了一个困扰我的错误。
  • 我只想更正我之前的评论:«我没有阅读 Java 异常»。我最近在学习 js 和方案时发现,阅读异常是学习语言编码的重要部分。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-01-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-05-04
  • 2017-11-20
相关资源
最近更新 更多