&引用;java.lang.ClassNotFoundException:javax.persistence.persistence";基于MVC的hibernate JPA项目中的错误
我尝试基于&引用;java.lang.ClassNotFoundException:javax.persistence.persistence";基于MVC的hibernate JPA项目中的错误,hibernate,jpa,servlets,model-view-controller,Hibernate,Jpa,Servlets,Model View Controller,我尝试基于MVC结构并通过hibernatejpa创建一个web应用程序 我想把数据表保存在数据库里。对于这个工作,我在servlet中获取数据,并在businesslogic“bl”包中调用personManager类中的方法 此方法大部分用于获取数据并保存数据,但会出现以下错误: 10-Dec-2018 11:15:07.463 SEVERE [http-nio-8080-exec-5] org.apache.catalina.core.StandardWrapperValve.invoke
MVC
结构并通过hibernatejpa
创建一个web应用程序
我想把数据表保存在数据库里。对于这个工作,我在servlet
中获取数据,并在businesslogic“bl”
包中调用personManager
类中的方法
此方法大部分用于获取数据并保存数据,但会出现以下错误:
10-Dec-2018 11:15:07.463 SEVERE [http-nio-8080-exec-5] org.apache.catalina.core.StandardWrapperValve.invoke Servlet.service() for servlet [manager] in context with path [] threw exception [Servlet execution threw an exception] with root cause
java.lang.ClassNotFoundException: javax.persistence.Persistence
at org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1309)
at org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1137)
at util.JPAProvider.<clinit>(JPAProvider.java:13)
at model.bl.PersonManager.<init>(PersonManager.java:24)
at controller.Manager.service(Manager.java:81)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:742)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:231)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:198)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:96)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:493)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:140)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:81)
at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:650)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:87)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:342)
at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:800)
at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:66)
at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:806)
at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1498)
at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)
at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
at java.lang.Thread.run(Unknown Source)
JPA提供者类别:
public class JPAProvider {
private static final EntityManagerFactory entityManagerFactory;//instate of session for connect to database
static{
entityManagerFactory = Persistence.createEntityManagerFactory("MyConnection");
}
public static EntityManagerFactory getEntityManagerFactory() {
return entityManagerFactory;
}
}
公共类人事经理{
EntityManager entityManager=null;
EntityTransaction entityTransaction=null;
public PersonManager() {
entityManager = JPAProvider.getEntityManagerFactory().createEntityManager();//session factory
entityTransaction = entityManager.getTransaction();
}
public Boolean addUser(String username , String password , String email , String sex)
{
try{
entityTransaction.begin();
Person person = new Person();
person.setUsername(username);
person.setPassword(password);
person.setEmail(email);
person.setSex(sex);
entityManager.persist(person);
entityTransaction.commit();
entityManager.close();
}catch (Exception e){
System.out.println(e.getStackTrace());
System.out.println("addUser failed");
}
return true;
}
}
人员类别:
package model.entity;
import model.bl.PersonManager;
import javax.persistence.*;
import java.io.Serializable;
import java.util.List;
//mapping class to table
@Entity (name = "person")
@Table(name = "USERS")
@EntityListeners(value = PersonManager.class)
public class Person implements Serializable
{
@Id // create id and fill auto by sequence in database
@Column(name="UID" ,columnDefinition = "NUMBER" )
@SequenceGenerator(name = "mySeq" , sequenceName = "DB_MYSEQ")
@GeneratedValue(strategy=GenerationType.AUTO ,generator="mySeq")
private long uId;
@OneToMany(cascade = CascadeType.ALL, fetch = FetchType.EAGER)
@JoinColumn(name = "FK_PERSON",referencedColumnName = "UID")
private List<Pictures> picturesList;
@Basic
@Column (name = "USERNAME" , columnDefinition = "NVARCHAR2(30)" , nullable = false , unique = true)
private String username ;
@Basic
@Column (name = "USER_PASSWORD" , columnDefinition = "NVARCHAR2(32)" , nullable = false , unique = true)
private String password ;
@Basic
@Column (name = "EMAIL" , columnDefinition = "NVARCHAR2(40)" , nullable = false)
private String email;
@Basic
@Column (name = "SEX" , columnDefinition = "NVARCHAR2(20)")
private String sex ;
//--------------------------------------------------------
public Person() { }
public Person(String username, String password, String email, String sex, String userPic) {
this.username = username;
this.password = password;
this.email = email;
this.sex = sex;
this.userPic = userPic;
}
public Person(String username, String password, String email ,String sex, String userPic,List<Pictures> picturesList ) {
this.picturesList = picturesList;
this.sex = sex;
this.userPic = userPic;
this.email = email;
this.password = password;
this.username = username;
}
//--------------------------------------------------------
public void setUsername(String username) {
this.username = username;
}
public void setPassword(String password) {
this.password = password;
}
public void setEmail(String email) {
this.email = email;
}
public void setUserPic(String userPic) {
this.userPic = userPic;
}
public void setSex(String sex) {
this.sex = sex;
}
public void setuId(long uId) {this.uId = uId;}
//--------------------------------------------------------
public String getUsername() {
return username;
}
public String getPassword() {
return password;
}
public String getUserPic() {
return userPic;
}
public String getEmail() {
return email;
}
public String getSex() {
return sex;
}
public long getuId() {return uId;}
}
}
package model.entity;
导入model.bl.PersonManager;
导入javax.persistence.*;
导入java.io.Serializable;
导入java.util.List;
//将类映射到表
@实体(名称=“人”)
@表(name=“USERS”)
@EntityListeners(值=PersonManager.class)
公共类Person实现可序列化
{
@Id//在数据库中创建Id并按顺序自动填充
@列(name=“UID”,columnDefinition=“NUMBER”)
@SequenceGenerator(name=“mySeq”,sequenceName=“DB_mySeq”)
@GeneratedValue(策略=GenerationType.AUTO,generator=“mySeq”)
私人长uId;
@OneToMany(cascade=CascadeType.ALL,fetch=FetchType.EAGER)
@JoinColumn(name=“FK_PERSON”,referencedColumnName=“UID”)
私有列表图片列表;
@基本的
@列(name=“USERNAME”,columnDefinition=“NVARCHAR2(30)”,null=false,unique=true)
私有字符串用户名;
@基本的
@列(name=“USER\u PASSWORD”,columnDefinition=“NVARCHAR2(32)”,null=false,unique=true)
私有字符串密码;
@基本的
@列(name=“EMAIL”,columnDefinition=“NVARCHAR2(40)”,null=false)
私人字符串电子邮件;
@基本的
@列(name=“SEX”,columnDefinition=“NVARCHAR2(20)”)
私密性;
//--------------------------------------------------------
公众人物(){}
公众人物(字符串用户名、字符串密码、字符串电子邮件、字符串性别、字符串userPic){
this.username=用户名;
this.password=密码;
this.email=电子邮件;
这个。性=性;
this.userPic=userPic;
}
公众人物(字符串用户名、字符串密码、字符串电子邮件、字符串性别、字符串用户图片、列表图片列表){
this.picturesList=picturesList;
这个。性=性;
this.userPic=userPic;
this.email=电子邮件;
this.password=密码;
this.username=用户名;
}
//--------------------------------------------------------
public void setUsername(字符串用户名){
this.username=用户名;
}
public void setPassword(字符串密码){
this.password=密码;
}
公用电子邮件(字符串电子邮件){
this.email=电子邮件;
}
公共void setUserPic(字符串userPic){
this.userPic=userPic;
}
公共无效集合(字符串性别){
这个。性=性;
}
public void setuId(长uId){this.uId=uId;}
//--------------------------------------------------------
公共字符串getUsername(){
返回用户名;
}
公共字符串getPassword(){
返回密码;
}
公共字符串getUserPic(){
返回userPic;
}
公共字符串getEmail(){
回复邮件;
}
公共字符串getSex(){
回归性;
}
public long getuId(){return uId;}
}
}
persistence.xml:
<persistence-unit name="MyConnection" transaction-type="RESOURCE_LOCAL">
<provider>org.hibernate.ejb.HibernatePersistence</provider>
<properties>
<!--<property name="hibernate.transaction.flush_before_completion" value="true"/>-->
<!--<property name="hibernate.format_sql" value="true"/>-->
<property name="hibernate.dialect" value="org.hibernate.dialect.Oracle10gDialect"/>
<property name="hibernate.connection.driver_class" value="oracle.jdbc.driver.OracleDriver"/>
<property name="hibernate.connection.username" value="midas"/>
<property name="hibernate.connection.password" value="midas123"/>
<property name="hibernate.connection.url" value="jdbc:oracle:thin:@localhost:1521:orcl"/>
<!--<property name="hibernate.hbm2ddl.auto" value="create-drop"/>-->
<property name="show_sql" value="true"></property>
<!-- <property name="hibernate.globally_quoted_identifiers" value="true"/>-->
</properties>
</persistence-unit>
org.hibernate.ejb.HibernatePersistence
在某些情况下,据说问题是丢失javax.persistence.jar
。
我向我的库中添加了新的javax.persistence.jar
,但问题没有得到解决
我使用:
tomcat 8
JDK 1.8.0-172
oracle 11g
IntellyJ Idea
我使用了以下库:
1) hibernate-enverc-4.2.0.final
2) hibernate-jpa-2.0-api-1.0.1-final.jar
3) tomcat库
项目结构:
src-->控制器-->管理器.java
src-->模型-->bl-->personManager.java
src-->实体-->person.java
src-->util-->JPAProvider.java
src-->META-INF-->persistence.xml
web-->视图-->
web-->web-INF-->库
web-->web-INF-->web.xml
如何修复此错误?它不应位于项目根目录下,而应直接位于源文件夹下
在运行时,persistence.xml文件在类路径中的META-INF下进行搜索。因此,如果希望META-INF文件夹位于编译包树的顶部,则需要将其置于源树的顶部。Eclipse将每个非Java文件复制到其输出目录(默认情况下为bin),这与包/文件夹的层次结构有关。对于仍然遇到此问题的任何人,我都得到了一个真正适合我的解决方案 打开项目属性(右键单击>属性)并选择“部署程序集”。单击“添加”,选择“构建路径条目”,然后选择“maven依赖项”。这将指示WTP将maven依赖项发送到服务器目录
我在web文件夹中移动META-INF,并在src中移动,但问题没有解决!我使用intelliJ,而不是eclipse。
<persistence-unit name="MyConnection" transaction-type="RESOURCE_LOCAL">
<provider>org.hibernate.ejb.HibernatePersistence</provider>
<properties>
<!--<property name="hibernate.transaction.flush_before_completion" value="true"/>-->
<!--<property name="hibernate.format_sql" value="true"/>-->
<property name="hibernate.dialect" value="org.hibernate.dialect.Oracle10gDialect"/>
<property name="hibernate.connection.driver_class" value="oracle.jdbc.driver.OracleDriver"/>
<property name="hibernate.connection.username" value="midas"/>
<property name="hibernate.connection.password" value="midas123"/>
<property name="hibernate.connection.url" value="jdbc:oracle:thin:@localhost:1521:orcl"/>
<!--<property name="hibernate.hbm2ddl.auto" value="create-drop"/>-->
<property name="show_sql" value="true"></property>
<!-- <property name="hibernate.globally_quoted_identifiers" value="true"/>-->
</properties>
</persistence-unit>