2016-07-30 83 views
2

得到了以下异常没有持久性提供EntityManager的命名

javax.persistence.PersistenceException: No Persistence provider for EntityManager named DERBY 
at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:69) 
at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:47) 
at com.kstiehl.test.Test.doGet(Test.java:45) 
at javax.servlet.http.HttpServlet.service(HttpServlet.java:621) 
at javax.servlet.http.HttpServlet.service(HttpServlet.java:728) 
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305) 
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210) 
at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:51) 
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243) 
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210) 
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:222) 
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:123) 
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:502) 
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:171) 
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:100) 
at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:953) 
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118) 
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:408) 
at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1041) 
at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:603) 
at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:310) 
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) 
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) 
at java.lang.Thread.run(Thread.java:745) 

这个目录结构

src 
├── main 
│   ├── java 
│   │   ├── com 
│   │   │   └── kstiehl 
│   │   │    ├── entities 
│   │   │    │   └── Person.java 
│   │   │    └── test 
│   │   │     └── Test.java 
│   │   └── Starter.java 
│   └── resources 
│    ├── log4j.properties 
│    ├── META-INF 
│    │   └── persistence.xml 
│    └── persistence.out.xml 
└── test 
    └── java 

我的坚持XML看起来像这样

<?xml version="1.0" encoding="UTF-8"?> 
<persistence version="2.0"  
xmlns="http://java.sun.com/xml/ns/persistence" 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xsi:schemaLocation="http://java.sun.com/xml/ns/persistence  
http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd"> 

<persistence-unit name="DERBY" transaction-type="RESOURCE_LOCAL"> 
    <provider>org.hibernate.ejb.HibernatePersistence</provider> 
    <class>com.kstiehl.entities.Person</class> 

    <properties> 
     <property name="hibernate.archive.autodetection" value="class" /> 
     <property name="hibernate.dialect" 
      value="com.mysema.query.jpa.support.ExtendedDerbyDialect" /> 
     <property name="hibernate.connection.driver_class" value="org.apache.derby.jdbc.EmbeddedDriver" /> 
     <property name="hibernate.connection.url" value="jdbc:derby:target/derbydb;create=true" /> 
     <!-- <property name="hibernate.show_sql" value="true"/> --> 
     <property name="hibernate.flushMode" value="FLUSH_AUTO" /> 
     <property name="hibernate.hbm2ddl.auto" value="update" /> 
    </properties> 
</persistence-unit> 

和La ST但并非最不重要我gralde构建脚本

apply plugin: 'war' 
apply plugin: 'eclipse' 

apply plugin: 'java' 

webAppDirName = 'WebContent' 



repositories { 
    mavenCentral() 
} 

dependencies { 
providedCompile 'javax.servlet:javax.servlet-api:3.0.1' 
compile group: 'log4j', name: 'log4j', version: '1.2.17' 
compile group: 'org.apache.derby', name: 'derby', version: '10.12.1.1' 
compile group: 'org.hibernate.javax.persistence', name: 'hibernate-jpa-2.0-api', version: '1.0.1.Final' 
compile group: 'org.hibernate', name: 'hibernate-entitymanager', version: '5.2.1.Final' 


} 


war { 

    webInf { from fileTree("WEB-INF")} // adds a file-set to the WEB-INF dir. 
    classpath fileTree('libs') 
} 

当我检查WAR文件一切都在正确的地方,但我仍然得到了错误。

这是我的servlet的do get方法,它只是为了测试目的来检查jpa thingy是否工作,但它已经在那里崩溃。

public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 
    EntityManagerFactory FACTORY = Persistence.createEntityManagerFactory("DERBY"); 
    EntityManager manager = null; 
    manager = FACTORY.createEntityManager(); 


} 

有什么想法吗?

回答

4

您的依赖关系中不包括org.hibernate.ejb.HibernatePersistence

无论您从persistence.xml删除显式提供商(这样,它应该拿起你的classpath的任何供应商) 或者你把它(实际上是一个处于休眠核心)更改为org.hibernate.jpa.HibernatePersistenceProvider

相关问题