Java 持久性,Hibernate:无法构建EntityManagerFactory Apache Tomcat&;Mysql

Java 持久性,Hibernate:无法构建EntityManagerFactory Apache Tomcat&;Mysql,java,mysql,hibernate,Java,Mysql,Hibernate,我正在制作一个简单的URL缩短器,我需要一些Mysql连接,但当我启动服务器并登录到调用实体管理器的servlet时,我遇到了以下异常: javax.persistence.PersistenceException:[PersistenceUnit:jpa suplink]无法构建EntityManagerFactory 我的项目是这样构建的: Project name + Java Resources ++ src +++ com.suplink.entity ++++ Account.jav

我正在制作一个简单的URL缩短器,我需要一些Mysql连接,但当我启动服务器并登录到调用实体管理器的servlet时,我遇到了以下异常:

javax.persistence.PersistenceException:[PersistenceUnit:jpa suplink]无法构建EntityManagerFactory

我的项目是这样构建的:

Project name
+ Java Resources
++ src
+++ com.suplink.entity
++++ Account.java
+++ com.suplink.filter
++++ redirectFilter.java
+++ com.suplink.servlet
++++ Login.java
+++ META-INF
++++ persistence.xml
+ WebContent
++ login.jsp
这是我转到localhost:8080/Suplink时的控制台日志:

janv. 16, 2013 7:32:07 PM org.apache.catalina.core.AprLifecycleListener init
INFO: The APR based Apache Tomcat Native library which allows optimal performance in production environments was not found on the java.library.path: C:\Program Files\Java\jre7\bin;C:\Windows\Sun\Java\bin;C:\Windows\system32;C:\Windows;C:\Program Files (x86)\NVIDIA Corporation\PhysX\Common;C:\Program Files (x86)\AMD APP\bin\x86_64;C:\Program Files (x86)\AMD APP\bin\x86;C:\Windows\system32;C:\Windows;C:\Windows\System32\Wbem;C:\Windows\System32\WindowsPowerShell\v1.0\;C:\Program Files (x86)\ATI Technologies\ATI.ACE\Core-Static;.
janv. 16, 2013 7:32:07 PM org.apache.tomcat.util.digester.SetPropertiesRule begin
WARNING: [SetPropertiesRule]{Server/Service/Engine/Host/Context} Setting property 'source' to 'org.eclipse.jst.jee.server:Suplink' did not find a matching property.
janv. 16, 2013 7:32:07 PM org.apache.coyote.AbstractProtocol init
INFO: Initializing ProtocolHandler ["http-bio-8080"]
janv. 16, 2013 7:32:07 PM org.apache.coyote.AbstractProtocol init
INFO: Initializing ProtocolHandler ["ajp-bio-8009"]
janv. 16, 2013 7:32:07 PM org.apache.catalina.startup.Catalina load
INFO: Initialization processed in 717 ms
janv. 16, 2013 7:32:07 PM org.apache.catalina.core.StandardService startInternal
INFO: Démarrage du service Catalina
janv. 16, 2013 7:32:07 PM org.apache.catalina.core.StandardEngine startInternal
INFO: Starting Servlet Engine: Apache Tomcat/7.0.34
janv. 16, 2013 7:32:08 PM org.apache.coyote.AbstractProtocol start
INFO: Starting ProtocolHandler ["http-bio-8080"]
janv. 16, 2013 7:32:08 PM org.apache.coyote.AbstractProtocol start
INFO: Starting ProtocolHandler ["ajp-bio-8009"]
janv. 16, 2013 7:32:08 PM org.apache.catalina.startup.Catalina start
INFO: Server startup in 997 ms
janv. 16, 2013 7:32:13 PM org.hibernate.annotations.common.Version <clinit>
INFO: HCANN000001: Hibernate Commons Annotations {4.0.1.Final}
janv. 16, 2013 7:32:13 PM org.hibernate.Version logVersion
INFO: HHH000412: Hibernate Core {4.1.9.Final}
janv. 16, 2013 7:32:13 PM org.hibernate.cfg.Environment <clinit>
INFO: HHH000206: hibernate.properties not found
janv. 16, 2013 7:32:13 PM org.hibernate.cfg.Environment buildBytecodeProvider
INFO: HHH000021: Bytecode provider name : javassist
javax.persistence.PersistenceException: [PersistenceUnit: jpa-suplink] Unable to build EntityManagerFactory
janv。2013年7月16日下午7:32:07 org.apache.catalina.core.AprLifecycleListener init
信息:在java.library.path:C:\Program Files\java\jre7\bin上找不到基于APR的Apache Tomcat本机库,该库允许在生产环境中实现最佳性能;C:\Windows\Sun\Java\bin;C:\Windows\system32;C:\Windows;C:\ProgramFiles(x86)\NVIDIA Corporation\PhysX\Common;C:\ProgramFiles(x86)\AMD APP\bin\x86\u 64;C:\ProgramFiles(x86)\AMD APP\bin\x86;C:\Windows\system32;C:\Windows;C:\Windows\System32\Wbem;C:\Windows\System32\WindowsPowerShell\v1.0\;C:\Program Files(x86)\ATI Technologies\ATI.ACE\Core Static;。
詹夫。2013年7月16日下午7:32:07 org.apache.tomcat.util.digester.SetPropertiesRule begin
警告:[SetPropertiesRule]{Server/Service/Engine/Host/Context}将属性“source”设置为“org.eclipse.jst.jee.Server:Suplink”未找到匹配的属性。
詹夫。2013年7月16日下午7:32:07 org.apache.coyote.AbstractProtocol init
信息:正在初始化ProtocolHandler[“http-bio-8080”]
詹夫。2013年7月16日下午7:32:07 org.apache.coyote.AbstractProtocol init
信息:正在初始化ProtocolHandler[“ajp-bio-8009”]
詹夫。2013年7月16日下午7:32:07 org.apache.catalina.startup.catalina加载
信息:717毫秒内处理初始化
詹夫。2013年7月16日下午7:32:07 org.apache.catalina.core.StandardService startInternal
信息:卡塔琳娜服务酒店
詹夫。2013年7月16日下午7:32:07 org.apache.catalina.core.StandardEngine startInternal
信息:启动Servlet引擎:ApacheTomcat/7.0.34
詹夫。2013年7月16日下午7:32:08 org.apache.coyote.AbstractProtocol开始
信息:正在启动ProtocolHandler[“http-bio-8080”]
詹夫。2013年7月16日下午7:32:08 org.apache.coyote.AbstractProtocol开始
信息:正在启动ProtocolHandler[“ajp-bio-8009”]
詹夫。2013年7月16日下午7:32:08 org.apache.catalina.startup.catalina start
信息:997毫秒后服务器启动
詹夫。2013年12月16日下午7:32:13 org.hibernate.annotations.common.Version
信息:HCANN000001:Hibernate Commons注释{4.0.1.Final}
詹夫。2013年12月16日下午7:32:13 org.hibernate.Version日志版本
信息:hh000412:Hibernate核心{4.1.9.Final}
詹夫。2013年12月16日下午7:32:13 org.hibernate.cfg.Environment
信息:HH000206:找不到hibernate.properties
詹夫。2013年12月16日下午7:32:13 org.hibernate.cfg.Environment buildBytecodeProvider
信息:HH000021:字节码提供程序名称:javassist
javax.persistence.PersistenceException:[PersistenceUnit:jpa suplink]无法构建EntityManagerFactory
还有我的Login.java、Account.java和persistence.xml

Login.java

package com.suplink.servlet;

import java.io.IOException;
import java.util.List;

import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.Persistence;
import javax.persistence.Query;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import com.suplink.entity.Account;

/**
 * Servlet implementation class Login
 */
@WebServlet(
        description = "Login form & Index page.", 
        urlPatterns = {
            "/login",
            "/index.html"
        })
public class Login extends HttpServlet {
    private static final long serialVersionUID = 1L;

    public Login() {
        super();
        // TODO Auto-generated constructor stub
    }

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        request.getRequestDispatcher("login.jsp").forward(request, response);

        try {
        EntityManagerFactory emf = null;
        emf = Persistence.createEntityManagerFactory("jpa-suplink");
        EntityManager em = emf.createEntityManager();

        Query query = em.createQuery("SELECT email FROM account");

        List<Account> accounts = (List<Account>)query.getResultList();
        System.out.println(query);

        for (Account a : accounts) {
            System.out.println(a);
        }

        em.close();
        emf.close();
        } catch (Exception e) {
            System.out.println(e);
        }
    }
}
package com.suplink.entity;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.Collection;

import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.OneToMany;
import javax.persistence.Table;

@Entity
@Table(name="account")
public class Account implements Serializable {
    private static final long serialVersionUID = 1L;

    @Id @GeneratedValue
    private long id;
    private String email;
    private String password;

    @OneToMany(mappedBy="account")
    private Collection<Account> accounts = new ArrayList <Account> ();

    public Account() {
    }

    public long getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public String getEmail() {
        return email;
    }

    public void setEmail(String email) {
        this.email = email;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }


}
package com.suplink.servlet;
导入java.io.IOException;
导入java.util.List;
导入javax.persistence.EntityManager;
导入javax.persistence.EntityManagerFactory;
导入javax.persistence.persistence;
导入javax.persistence.Query;
导入javax.servlet.ServletException;
导入javax.servlet.annotation.WebServlet;
导入javax.servlet.http.HttpServlet;
导入javax.servlet.http.HttpServletRequest;
导入javax.servlet.http.HttpServletResponse;
导入com.suplink.entity.Account;
/**
*Servlet实现类登录
*/
@WebServlet(
description=“登录表单和索引页。”,
URL模式={
“/login”,
“/index.html”
})
公共类登录扩展了HttpServlet{
私有静态最终长serialVersionUID=1L;
公共登录(){
超级();
//TODO自动生成的构造函数存根
}
受保护的void doGet(HttpServletRequest请求,HttpServletResponse响应)抛出ServletException,IOException{
getRequestDispatcher(“login.jsp”).forward(请求、响应);
试一试{
EntityManagerFactory emf=null;
emf=Persistence.createEntityManagerFactory(“jpa suplink”);
EntityManager em=emf.createEntityManager();
Query Query=em.createQuery(“从帐户中选择电子邮件”);
List accounts=(List)query.getResultList();
System.out.println(查询);
(账户a:账户){
系统输出打印项次(a);
}
em.close();
emf.close();
}捕获(例外e){
系统输出打印ln(e);
}
}
}
Account.java

package com.suplink.servlet;

import java.io.IOException;
import java.util.List;

import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.Persistence;
import javax.persistence.Query;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import com.suplink.entity.Account;

/**
 * Servlet implementation class Login
 */
@WebServlet(
        description = "Login form & Index page.", 
        urlPatterns = {
            "/login",
            "/index.html"
        })
public class Login extends HttpServlet {
    private static final long serialVersionUID = 1L;

    public Login() {
        super();
        // TODO Auto-generated constructor stub
    }

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        request.getRequestDispatcher("login.jsp").forward(request, response);

        try {
        EntityManagerFactory emf = null;
        emf = Persistence.createEntityManagerFactory("jpa-suplink");
        EntityManager em = emf.createEntityManager();

        Query query = em.createQuery("SELECT email FROM account");

        List<Account> accounts = (List<Account>)query.getResultList();
        System.out.println(query);

        for (Account a : accounts) {
            System.out.println(a);
        }

        em.close();
        emf.close();
        } catch (Exception e) {
            System.out.println(e);
        }
    }
}
package com.suplink.entity;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.Collection;

import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.OneToMany;
import javax.persistence.Table;

@Entity
@Table(name="account")
public class Account implements Serializable {
    private static final long serialVersionUID = 1L;

    @Id @GeneratedValue
    private long id;
    private String email;
    private String password;

    @OneToMany(mappedBy="account")
    private Collection<Account> accounts = new ArrayList <Account> ();

    public Account() {
    }

    public long getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public String getEmail() {
        return email;
    }

    public void setEmail(String email) {
        this.email = email;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }


}
package com.suplink.entity;
导入java.io.Serializable;
导入java.util.ArrayList;
导入java.util.Collection;
导入javax.persistence.Entity;
导入javax.persistence.GeneratedValue;
导入javax.persistence.Id;
导入javax.persistence.OneToMany;
导入javax.persistence.Table;
@实体
@表(name=“account”)
公共类帐户实现可序列化{
私有静态最终长serialVersionUID=1L;
@Id@GeneratedValue
私人长id;
私人字符串电子邮件;
私有字符串密码;
@OneToMany(mappedBy=“账户”)
私人收款账户=新ArrayList();
公共帐户(){
}
公共长getId(){
返回id;
}
公共无效集合id(整数id){
this.id=id;
}
公共字符串getEmail(){
回复邮件;
}
公用电子邮件(字符串电子邮件){
this.email=电子邮件;
}
公共字符串getPassword(){
返回密码;
}
public void setPassword(字符串密码){
this.password=密码;
}
}
Persistence.xml

<?xml version="1.0" encoding="UTF-8"?>
<persistence 
    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"
    version="2.0">
    <persistence-unit name="jpa-suplink" transaction-type="RESOURCE_LOCAL">
        <properties>
            <property name="hibernate.connection.driver_class" value="com.mysql.jdbc.Driver"/>
            <property name="hibernate.connection.url" value="jdbc:mysql://127.0.0.1/suplink"/>
            <property name="hibernate.connection.username" value="root"/>
            <property name="hibernate.connection.password" value=""/>

            <property name="hibernate.dialect" value="org.hibernate.dialect.MySQLDialect"/>
            <property name="hibernate.hbm2ddl.auto" value="update" />
        </properties>
    </persistence-unit>
</persistence>

在下面的一段代码中
mappedBy
引用了
account
实体中名为
account
的属性:

@OneToMany(mappedBy="account")
private Collection<Account> accounts = new ArrayList <Account> ();
另一个选择是保留它