java.lang.ClassNotFoundException: javax.persistence.Table

来源:互联网 发布:智能家居网络协议 编辑:程序博客网 时间:2024/05/17 22:49

今天在java Web中使用注解来操作javaBean保存数据库出现如下错误:

我的javaBean代码:

package com.xiaoqiang.domain;


import javax.persistence.Column;
import javax.persistence.Table;


@Table (name="users")
public class User {
@Column
private String id;
@Column
private String name;
@Column
private String pwd;
@Column
private String mail;

private String code;//激活码
public String getCode() {
return code;
}
public void setCode(String code) {
this.code = code;
}
public User() {

}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPwd() {
return pwd;
}
public void setPwd(String pwd) {
this.pwd = pwd;
}
public String getMail() {
return mail;
}
public void setMail(String mail) {
this.mail = mail;
}
@Override
public String toString() {
return "User [id=" + id + ", name=" + name + ", pwd=" + pwd + ", mail="
+ mail + ", code=" + code + "]";
}


通过获取注解来操作javaBean的代码:

public <T>T   save(T t) throws Exception{
//获取类的字节码
Class<?> cls = t.getClass();
//从字节码上获取name的值,这个值就是表名
Table table = cls.getAnnotation(Table.class);
//获取表名
String tableName = table.name();
//组成insert语句
String sql="insert into "+tableName;
String cols="(";
String values="values(";
//获取所有声明的字段
Field[] fs = cls.getDeclaredFields();

//遍历所有的字段
for(Field f:fs){
if(f.isAnnotationPresent(Column.class)){
//获取列名
String colName = f.getName();
//System.out.println("colName----------"+colName);
//获取Column的对象
Column col = f.getAnnotation(Column.class);
if(col.name()!=null  &&  !col.name().trim().equals("")){
colName=col.name();
}
//获取列值
f.setAccessible(true);
//获取列的值
Object value = f.get(t);
//System.out.println("Value----------"+value);
if(cols.equals("(")){
if(value instanceof String){
values+="'"+value+"'";
}else{
values+=value;
}
cols+=colName;

}else{
cols+=","+colName;
if(value instanceof String){
values+=","+"'"+value+"'";
}else{
values+=","+value;
}

}
}
}
cols+=")";
values+=")";
sql=sql+cols+" "+values;
System.out.println(sql);
update(sql);

return t;
}


调用代码:

User u = new User();
u.setId("U008");
u.setName("小强");
u.setPwd("haha");
u.setAge(21);
u.setAddr("中国");

QueryRunner run = new QueryRunner(DataSourceUtils.getDataSource());
run.save(u);



异常信息:

java.lang.ClassNotFoundException: javax.persistence.Table

at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1680)
at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1526)
at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:320)
at com.xiaoqiang.utils.QueryRunner.save(QueryRunner.java:26)
at com.xiaoqiang.db.DbDemo.save(DbDemo.java:21)
at com.xiaoqiang.TestServlet.doGet(TestServlet.java:27)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:617)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:293)
at org.apache.coyote.http11.Http11AprProcessor.process(Http11AprProcessor.java:877)
at org.apache.coyote.http11.Http11AprProtocol$Http11ConnectionHandler.process(Http11AprProtocol.java:594)
at org.apache.tomcat.util.net.AprEndpoint$Worker.run(AprEndpoint.java:1675)

at java.lang.Thread.run(Thread.java:619)

解决方法:

在java项目中可以这样做,

在web项目中需要导入persistence-api-1.0.jar包就OK了








0 0
原创粉丝点击