错误提示如下: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
但替换了还是不行,不知道哪儿错了,麻烦各位帮忙看看

解决方案 »

  1.   

    persistence.xml 文件内容
    <?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>
      

  2.   

    UserInfo这个been在哪个文件里边定义的啊?你现在的架构和引用情况能再说一下吗
      

  3.   


    谢谢 你的回复在persistence.xml有定义
    <exclude-unlisted-classes>false</exclude-unlisted-classes>所以只要是实体,都会默认被该文件包含。
      

  4.   


    问题解决了,总结一下:1.SimpleLoadTimeWeaver替换成InstrumentationLoadTimeWeaver 并在tomcat启动脚本中加入
    JAVA_OPTS="-javaagent:/home/charon/Study/JAVA/jars/spring-agent.jar"
    这是在linux下的写法,Win下应该是用SET吧,加在第一行即可2.persistence.xml不写与数据库有关的信息,只用来添加可用的实体bean即可大概就这样的吧心情轻松多了,晚上来散分咯,回贴即有分哦