2010-04-18 33 views
9

Tôi đang tạo ứng dụng dành cho máy tính để bàn bằng cách sử dụng hibernate 3.5 & JPA 2.0.JPA 2.0, hibernate 3.5, jars & persistence.xml location

tôi có 2 lọ,

lib, trong đó xác định mỗi thực thể và DAO, bao bì trông như thế này:

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

Trong org.my.package.utils tôi định nghĩa lớp tiện ích ngủ đông của tôi cho nhận được EM & trường hợp EMF, có nghĩa là lib bị ràng buộc với tên Đơn vị Persistence nhưng giờ không phải là vấn đề (dù sao bạn có thể giới thiệu cho tôi cách tốt hơn để quản lý)

bình thứ hai được xây dựng như sau:

org.my.package.app

META-INF được xác định trên thư mục gốc của dự án có nghĩa là trong jar của tôi, tôi có thể tìm thấy thư mục này trực tiếp trong thư mục gốc:

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

Khi tôi chạy ứng dụng, hibernate không quản lý để tìm persistence.xml nó ném một ngoại lệ một cái gì đó như "gói hoặc lớp học cho PersistenceUnitName không tìm thấy".

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 

Tôi googled một chút về the problem nhưng tôi không thể có được quyền tổ chức mã nguồn.

Bất kỳ trợ giúp nào?

+0

bạn có chắc là thông báo có nghĩa là không tìm thấy tệp, chứ không phải là sự cố trong tệp? – Bozho

+1

Đăng ** ** ngoại lệ chính xác (và dấu vết) và persistence.xml của bạn –

+1

http://techblog.bozho.net/?p=155 – Bozho

Trả lời

9

Lớp hoặc gói không tìm thấy nhắn là tự giải thích: một lớp hoặc một gói không được tìm thấy - không phải là persistence.xml - theo đề nghị của nguyên nhân của ngoại lệ:

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

Các model.Extrait thực thể không phản ánh bao bì bạn đang hiển thị nhưng rất có khả năng được khai báo trong persistence.xml của bạn (mà bạn không hiển thị) nhưng không hiển thị trên đường dẫn lớp.

+1

xấu hổ với tôi điều này thực sự ngu ngốc. – amirouche

+3

Lỗi này đã giúp tôi hiểu rằng tôi không hiểu đầu ra Java Exceptions ... – amirouche

+2

@phmr Tất cả chúng ta đều học hỏi từ những sai lầm :) Một số cuộc gọi liên tiếp của những sai lầm "kinh nghiệm". –

Các vấn đề liên quan