【发布时间】:2011-02-22 06:36:25
【问题描述】:
我正在使用 Hibernate Entity Manager。它抱怨找不到持久性提供程序,但仍将其记录在日志中:
TRACE 2011-02-21 22:17:52,843 [main](Ejb3Configuration.java:321) org.hibernate.ejb.Ejb3Configuration - PersistenceMetadata(version=2.0) [
name: sample
jtaDataSource: null
nonJtaDataSource: null
transactionType: RESOURCE_LOCAL
provider: org.hibernate.ejb.HibernatePeristence
useQuotedIdentifiers: false
classes[
]
packages[
]
mappingFiles[
]
jarFiles[
]
hbmfiles: 0
properties[
hibernate.connection.username: scott
hibernate.connection.password: tiger
hibernate.dialect: org.hibernate.dialect.OracleDialect
hibernate.show_sql: true
hibernate.connection.url: jdbc:oracle:thin:@localhost:1521:krsna
hibernate.archive.autodetection: class, hbm
hibernate.connection.driver_class: oracle.jdbc.driver.OracleDriver
]]
Exception in thread "main" javax.persistence.PersistenceException: No Persistence provider for EntityManager named sample
at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:54)
at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:32)
at EMPersistDemo2.main(EMPersistDemo2.java:26)
很明显它找到了它,记录了它......但仍然抛出那个异常。 我错过了什么吗?
我正在使用 maven,并将 persistence.xml 放在 src/main/resources/META-INF 中。 它的内容是:
<!-- persistence.xml -->
<persistence ...>
<persistence-unit name="sample">
<provider>org.hibernate.ejb.HibernatePeristence</provider>
<!-- Scan for annotated classes and Hibernate mapping XML files -->
<properties>
<property name="hibernate.archive.autodetection" value="class, hbm"/>
<property name="hibernate.connection.driver_class" value="oracle.jdbc.driver.OracleDriver"/>
<property name="hibernate.connection.url" value="jdbc:oracle:thin:@localhost:1521:krsna"/>
<property name="hibernate.connection.username" value="scott"/>
<property name="hibernate.connection.password" value="tiger"/>
<property name="hibernate.dialect" value="org.hibernate.dialect.OracleDialect"/>
<property name="hibernate.show_sql" value="true"/>
</properties>
</persistence-unit>
</persistence>
org.hibernate.Ejb3Configuration 能够找到它 javax.persitence.Persistence 无法找到它:
EntityManagerFactory emf = Persistence.createEntityManagerFactory("sample");
【问题讨论】:
-
你是如何运行你的代码的?可能是 META-INF 的路径不在您的类路径中
-
我将它作为一个简单的 main() 程序运行。 META-INF/persistence.xml 在 src/main/resources 中。正在编译到 D:/arun/mavenprojects/hibernateHawa/target/classes/META-INF/persistence.xml。当我打印 CLASSPATH 时,我看到 D:/arun/mavenprojects/hibernateHawa/target/ 作为第一个条目。很明显,META-INF/persistence.xml 在 CLASSPATH 中。我不知道 Ejb3Configurer 从哪里进入日志并说它可以找到它。但我的代码行 Persistence.createEntity Manager("sample")...抛出异常。
标签: hibernate jpa maven entitymanager