错误提示如下:org.springframework.dao.InvalidDataAccessApiUsageException: Unknown entity bean class: class cn.edu.jmu.acm.entity.UserInfo, please verify that this class has been ed with the @Entity annotation.; nested exception is java.lang.IllegalArgumentException: Unknown entity bean class: class cn.edu.jmu.acm.entity.UserInfo, please verify that this class has been ed with the @Entity annotation.
at org.springframework.orm.jpa.EntityManagerFactoryUtils.convertJpaAccessExceptionIfPossible(EntityManagerFactoryUtils.java:269)
...
org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter.handle(AnnotationMethodHandlerAdapter.java:245)
...Caused by: java.lang.IllegalArgumentException: Unknown entity bean class: class cn.edu.jmu.acm.entity.UserInfo, please verify that this class has been ed with the @Entity annotation.
... 35 more
出错的实体beanpackage cn.edu.jmu.acm.entity;import java.io.Serializable;
import java.util.Date;
import java.util.Set;
import javax.persistence.Basic;
import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.NamedQueries;
import javax.persistence.NamedQuery;
import javax.persistence.OneToMany;
import javax.persistence.Table;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;/**
*
* @author charon
*/
@Entity
@Table(name = "UserInfo")
@NamedQueries({@NamedQuery(name = "UserInfo.findAll", query = "SELECT u FROM UserInfo u")})
public class UserInfo implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Basic(optional = false)
@Column(name = "UserInfoId")
private Integer userInfoId;
@Basic(optional = false)
@Column(name = "Account")
private String account;
@Basic(optional = false)
@Column(name = "Email")
private String email;
@Column(name = "Nickname")
private String nickname;
@Basic(optional = false)
@Column(name = "Passwd")
private String passwd;
@Basic(optional = false)
@Column(name = "RegistTime")
@Temporal(TemporalType.TIMESTAMP)
private Date registTime;
@Basic(optional = false)
@Column(name = "SecretAnswer")
private String secretAnswer;
@Basic(optional = false)
@Column(name = "SecretQuestion")
private String secretQuestion;
@Basic(optional = false)
@Column(name = "UserStatus")
private char userStatus;
@OneToMany(cascade = CascadeType.ALL, mappedBy = "userInfoId", fetch = FetchType.EAGER)
private Set<ContestPlayer> contestPlayerCollection;
@JoinColumn(name = "UserRoleId", referencedColumnName = "UserRoleId")
@ManyToOne(optional = false, fetch = FetchType.EAGER)
private UserRole userRoleId;
@OneToMany(cascade = CascadeType.ALL, mappedBy = "userInfoId", fetch = FetchType.EAGER)
private Set<Solution> solutionCollection; public UserInfo() {
} public UserInfo(Integer userInfoId) {
this.userInfoId = userInfoId;
} public UserInfo(Integer userInfoId, String account, String email, String passwd, Date registTime, String secretAnswer, String secretQuestion, char userStatus) {
this.userInfoId = userInfoId;
this.account = account;
this.email = email;
this.passwd = passwd;
this.registTime = registTime;
this.secretAnswer = secretAnswer;
this.secretQuestion = secretQuestion;
this.userStatus = userStatus;
} /*省略了Setter和Getter方法*/ @Override
public int hashCode() {
int hash = 0;
hash += (userInfoId != null ? userInfoId.hashCode() : 0);
return hash;
} @Override
public boolean equals(Object object) {
// TODO: Warning - this method won't work in the case the id fields are not set
if (!(object instanceof UserInfo)) {
return false;
}
UserInfo other = (UserInfo) object;
if ((this.userInfoId == null && other.userInfoId != null) || (this.userInfoId != null && !this.userInfoId.equals(other.userInfoId))) {
return false;
}
return true;
} @Override
public String toString() {
return "cn.edu.jmu.acm.entity.UserInfo[userInfoId=" + userInfoId + "]";
}}spring配置<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:tx="http://www.springframework.org/schema/tx"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.5.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-2.5.xsd">
<!-- 数据库相关 Start -->
<bean id="dataSource" class="org.springframework.jndi.JndiObjectFactoryBean">
<property name="jndiName" value="java:comp/env/jdbc/acmjmu" />
</bean>
<bean id="entityManagerFactory" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
<property name="dataSource" ref="dataSource"></property>
<property name="jpaVendorAdapter">
<bean class="org.springframework.orm.jpa.vendor.TopLinkJpaVendorAdapter">
<property name="database" value="MYSQL" />
<property name="databasePlatform" value="oracle.toplink.essentials.platform.database.MySQL4Platform"/>
</bean>
</property>
<property name="loadTimeWeaver">
<bean class="org.springframework.instrument.classloading.InstrumentationLoadTimeWeaver"/>
</property>
</bean>
<!-- 数据库相关 END -->
</beans>
搞了老半天了,看不出哪里出错了,网上有说把
org.springframework.instrument.classloading.SimpleLoadTimeWeaver
替换成
org.springframework.instrument.classloading.InstrumentationLoadTimeWeaver
但替换了还是不行,不知道哪儿错了,麻烦各位帮忙看看
at org.springframework.orm.jpa.EntityManagerFactoryUtils.convertJpaAccessExceptionIfPossible(EntityManagerFactoryUtils.java:269)
...
org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter.handle(AnnotationMethodHandlerAdapter.java:245)
...Caused by: java.lang.IllegalArgumentException: Unknown entity bean class: class cn.edu.jmu.acm.entity.UserInfo, please verify that this class has been ed with the @Entity annotation.
... 35 more
出错的实体beanpackage cn.edu.jmu.acm.entity;import java.io.Serializable;
import java.util.Date;
import java.util.Set;
import javax.persistence.Basic;
import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.NamedQueries;
import javax.persistence.NamedQuery;
import javax.persistence.OneToMany;
import javax.persistence.Table;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;/**
*
* @author charon
*/
@Entity
@Table(name = "UserInfo")
@NamedQueries({@NamedQuery(name = "UserInfo.findAll", query = "SELECT u FROM UserInfo u")})
public class UserInfo implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Basic(optional = false)
@Column(name = "UserInfoId")
private Integer userInfoId;
@Basic(optional = false)
@Column(name = "Account")
private String account;
@Basic(optional = false)
@Column(name = "Email")
private String email;
@Column(name = "Nickname")
private String nickname;
@Basic(optional = false)
@Column(name = "Passwd")
private String passwd;
@Basic(optional = false)
@Column(name = "RegistTime")
@Temporal(TemporalType.TIMESTAMP)
private Date registTime;
@Basic(optional = false)
@Column(name = "SecretAnswer")
private String secretAnswer;
@Basic(optional = false)
@Column(name = "SecretQuestion")
private String secretQuestion;
@Basic(optional = false)
@Column(name = "UserStatus")
private char userStatus;
@OneToMany(cascade = CascadeType.ALL, mappedBy = "userInfoId", fetch = FetchType.EAGER)
private Set<ContestPlayer> contestPlayerCollection;
@JoinColumn(name = "UserRoleId", referencedColumnName = "UserRoleId")
@ManyToOne(optional = false, fetch = FetchType.EAGER)
private UserRole userRoleId;
@OneToMany(cascade = CascadeType.ALL, mappedBy = "userInfoId", fetch = FetchType.EAGER)
private Set<Solution> solutionCollection; public UserInfo() {
} public UserInfo(Integer userInfoId) {
this.userInfoId = userInfoId;
} public UserInfo(Integer userInfoId, String account, String email, String passwd, Date registTime, String secretAnswer, String secretQuestion, char userStatus) {
this.userInfoId = userInfoId;
this.account = account;
this.email = email;
this.passwd = passwd;
this.registTime = registTime;
this.secretAnswer = secretAnswer;
this.secretQuestion = secretQuestion;
this.userStatus = userStatus;
} /*省略了Setter和Getter方法*/ @Override
public int hashCode() {
int hash = 0;
hash += (userInfoId != null ? userInfoId.hashCode() : 0);
return hash;
} @Override
public boolean equals(Object object) {
// TODO: Warning - this method won't work in the case the id fields are not set
if (!(object instanceof UserInfo)) {
return false;
}
UserInfo other = (UserInfo) object;
if ((this.userInfoId == null && other.userInfoId != null) || (this.userInfoId != null && !this.userInfoId.equals(other.userInfoId))) {
return false;
}
return true;
} @Override
public String toString() {
return "cn.edu.jmu.acm.entity.UserInfo[userInfoId=" + userInfoId + "]";
}}spring配置<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:tx="http://www.springframework.org/schema/tx"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.5.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-2.5.xsd">
<!-- 数据库相关 Start -->
<bean id="dataSource" class="org.springframework.jndi.JndiObjectFactoryBean">
<property name="jndiName" value="java:comp/env/jdbc/acmjmu" />
</bean>
<bean id="entityManagerFactory" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
<property name="dataSource" ref="dataSource"></property>
<property name="jpaVendorAdapter">
<bean class="org.springframework.orm.jpa.vendor.TopLinkJpaVendorAdapter">
<property name="database" value="MYSQL" />
<property name="databasePlatform" value="oracle.toplink.essentials.platform.database.MySQL4Platform"/>
</bean>
</property>
<property name="loadTimeWeaver">
<bean class="org.springframework.instrument.classloading.InstrumentationLoadTimeWeaver"/>
</property>
</bean>
<!-- 数据库相关 END -->
</beans>
搞了老半天了,看不出哪里出错了,网上有说把
org.springframework.instrument.classloading.SimpleLoadTimeWeaver
替换成
org.springframework.instrument.classloading.InstrumentationLoadTimeWeaver
但替换了还是不行,不知道哪儿错了,麻烦各位帮忙看看
<?xml version="1.0" encoding="UTF-8"?>
<persistence version="1.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_1_0.xsd">
<persistence-unit name="AcmJmuPU" transaction-type="RESOURCE_LOCAL">
<provider>oracle.toplink.essentials.PersistenceProvider</provider>
<exclude-unlisted-classes>false</exclude-unlisted-classes>
<properties>
<property name="toplink.logging.level" value="FINE"/>
</properties>
</persistence-unit>
</persistence>
谢谢 你的回复在persistence.xml有定义
<exclude-unlisted-classes>false</exclude-unlisted-classes>所以只要是实体,都会默认被该文件包含。
问题解决了,总结一下:1.SimpleLoadTimeWeaver替换成InstrumentationLoadTimeWeaver 并在tomcat启动脚本中加入
JAVA_OPTS="-javaagent:/home/charon/Study/JAVA/jars/spring-agent.jar"
这是在linux下的写法,Win下应该是用SET吧,加在第一行即可2.persistence.xml不写与数据库有关的信息,只用来添加可用的实体bean即可大概就这样的吧心情轻松多了,晚上来散分咯,回贴即有分哦