簡體   English   中英

Java JPA-沒有名為EntityManager的持久性提供程序

[英]Java JPA - No Persistence provider for EntityManager named

將Java JPA與Eclipse Link結合使用我試圖將Blog應用程序的簡單Post模型持久化到MySQL數據庫中,但是卻收到錯誤消息No Persistence provider for EntityManager named

這是我正在使用的代碼

例外文字

javax.persistence.PersistenceException:名為Blog javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:85)的EntityManager的持久性提供程序均沒有。 .PostController。(PostController.java:9)com.uk.jacob.blog.controllers.HomeController.doGet(HomeController.java:51)javax.servlet.http.HttpServlet.service(HttpServlet.java:620)javax.servlet。 http.HttpServlet.service(HttpServlet.java:727)org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)

應用程式結構

應用程式結構

pom.xml

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>com.uk.jacob</groupId>
  <artifactId>blog</artifactId>
  <version>0.0.1-SNAPSHOT</version>
  <packaging>war</packaging>
  <name>Jacob Clark Blog</name>
  <description>A blog for jacob.uk.com</description>

  <dependencies>
    <dependency>
        <groupId>javax.servlet</groupId>
        <artifactId>javax.servlet-api</artifactId>
        <version>3.1.0</version>
    </dependency>
    <dependency>
        <groupId>taglibs</groupId>
        <artifactId>standard</artifactId>
        <version>1.1.2</version>
    </dependency>
    <dependency>
        <groupId>javax.servlet</groupId>
        <artifactId>jstl</artifactId>
        <version>1.2</version>
    </dependency>
    <dependency>
        <groupId>javax.persistence</groupId>
        <artifactId>persistence-api</artifactId>
        <version>1.0.2</version>
    </dependency>
    <dependency>
        <groupId>org.eclipse.persistence</groupId>
        <artifactId>javax.persistence</artifactId>
        <version>2.1.0</version>
    </dependency>
    <dependency>
        <groupId>org.eclipse.persistence</groupId>
        <artifactId>org.eclipse.persistence.jpa</artifactId>
        <version>2.6.0-M3</version>
    </dependency>
    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
        <version>5.1.33</version>
    </dependency>
  </dependencies>
</project>

persistence.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="blog" transaction-type="RESOURCE_LOCAL">
    <provider>org.eclipse.persistence.jpa.PersistenceProvider</provider>
    <class>uk.com.jacob.blog.models.Post</class>
       <properties>
           <property name="javax.persistence.jdbc.url"
                   value="jdbc:mysql://localhost:3306/jpadb"/>
           <property name="javax.persistence.jdbc.user" value="root"/>
          <property name="javax.persistence.jdbc.password" value="root"/>
          <property name="javax.persistence.jdbc.driver"
                   value="com.mysql.jdbc.Driver"/>
           <property name="eclipselink.logging.level" value="FINE"/>
          <property name="eclipselink.ddl-generation" 
               value="create-tables"/>
       </properties>
   </persistence-unit>
</persistence>

后豆

package com.uk.jacob.blog.models;

import java.util.Date;
import javax.persistence.*;

@Entity
public class Post {
    @Id
    private int     _id;
    private String  _title;
    private String  _author;
    private String  _body;
    private Date    _published;

    public int getId(){
        return _id;
    }

    public void setId(int _id){
        this._id = _id;
    }

    public String getTitle() {
        return _title;
    }

    public void setTitle(String _title) {
        this._title = _title;
    }

    public String getAuthor() {
        return _author;
    }

    public void setAuthor(String _author) {
        this._author = _author;
    }

    public String getBody() {
        return _body;
    }

    public void setBody(String _body) {
        this._body = _body;
    }

    public Date getPublished() {
        return _published;
    }

    public void setPublished(Date _published) {
        this._published = _published;
    }

}

崗位控制器

package com.uk.jacob.blog.controllers;

import javax.persistence.*;

import com.uk.jacob.blog.models.Post;

public class PostController {

    private EntityManagerFactory emf = Persistence.createEntityManagerFactory("blog");
    private EntityManager em = emf.createEntityManager();
    private EntityTransaction tx = em.getTransaction();

    public Post createPost(Post post){
        tx.begin();
        em.persist(post);
        tx.commit();
        return post;
    }

    public Post getPost(int id){
        return em.find(Post.class, id);
    }

    public void removePost(Post post){
        em.remove(em.merge(post));
    }

    public void updatePost(Post post){
        tx.begin();
            Post postToBeUpdated = em.merge(post);
        tx.commit();
    }

}

這是因為您的pom.xml中沒有eclipselink依賴項。 你也不需要

<dependency> <groupId>javax.persistence</groupId> <artifactId>persistence-api</artifactId> <version>1.0.2</version> </dependency> <dependency> <groupId>org.eclipse.persistence</groupId> <artifactId>javax.persistence</artifactId> <version>2.1.0</version> </dependency> <dependency> <groupId>org.eclipse.persistence</groupId> <artifactId>org.eclipse.persistence.jpa</artifactId> <version>2.6.0-M3</version> </dependency>

只是

<dependency>
    <groupId>org.eclipse.persistence</groupId>
    <artifactId>eclipselink</artifactId>
    <version>2.4.2</version>
</dependency>

足夠(版本可能會更改)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM