Java PropertyAccessException:在使用Hibernate时无法通过反射getter获取字段值

Java PropertyAccessException:在使用Hibernate时无法通过反射getter获取字段值,java,hibernate,reflection,Java,Hibernate,Reflection,我有java类CourseOfferedCourseTaker和Teacher,其中CourseTaker有Teacher和CourseOffered的主键作为外键 提供的课程如下所示(我删除了一些基本的构造函数和获取者和设置者,以使其变小;) 最后是CourseTakerClass @Entity @Table(name = "course_taker") @XmlRootElement @NamedQueries({ @NamedQuery(name = "CourseTaker.f

我有java类
CourseOffered
CourseTaker
Teacher
,其中
CourseTaker
Teacher
CourseOffered
的主键作为外键

提供的
课程如下所示(我删除了一些基本的
构造函数
获取者
设置者
,以使其变小;)

最后是
CourseTaker
Class

@Entity
@Table(name = "course_taker")
@XmlRootElement
@NamedQueries({
    @NamedQuery(name = "CourseTaker.findAll", query = "SELECT c FROM CourseTaker c"),
    @NamedQuery(name = "CourseTaker.findByCourseTakerId", query = "SELECT c FROM   CourseTaker c WHERE c.courseTakerId = :courseTakerId")})
public class CourseTaker implements Serializable {
    private static final long serialVersionUID = 1L;
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Basic(optional = false)
    @Column(name = "course_taker_id")
    private Integer courseTakerId;
    @JoinColumn(name = "ca_course_id", referencedColumnName = "course_id")
    @ManyToOne(optional = false)
    private CourseOffered caCourseId;
    @JoinColumn(name = "ca_teacher_id", referencedColumnName = "teacher_id")
    @ManyToOne(optional = false)
    private Teacher caTeacherId;

    public CourseTaker() {
    }

    public CourseTaker(Integer courseTakerId) {
        this.courseTakerId = courseTakerId;
    }

    public Integer getCourseTakerId() {
        return courseTakerId;
    }

    public void setCourseTakerId(Integer courseTakerId) {
        this.courseTakerId = courseTakerId;
    }

    public CourseOffered getCaCourseId() {
        return caCourseId;
    }

    public void setCaCourseId(CourseOffered caCourseId) {
        this.caCourseId = caCourseId;
    }

    public Teacher getCaTeacherId() {
        return caTeacherId;
    }

    public void setCaTeacherId(Teacher caTeacherId) {
        this.caTeacherId = caTeacherId;
    }
}
我还有一个
CourseTakerService
类,看起来像这样

@Entity
@Table(name = "teacher")
@XmlRootElement
@NamedQueries({
    @NamedQuery(name = "Teacher.findAll", query = "SELECT t FROM Teacher t"),
    @NamedQuery(name = "Teacher.findByTeacherId", query = "SELECT t FROM Teacher t WHERE t.teacherId = :teacherId"),
    @NamedQuery(name = "Teacher.findByTeaCode", query = "SELECT t FROM Teacher t WHERE t.teaCode = :teaCode"),
    @NamedQuery(name = "Teacher.findByTeaPassword", query = "SELECT t FROM Teacher t WHERE t.teaPassword = :teaPassword"),
    @NamedQuery(name = "Teacher.findByTeaName", query = "SELECT t FROM Teacher t WHERE t.teaName = :teaName"),
    @NamedQuery(name = "Teacher.findByTeaEmail", query = "SELECT t FROM Teacher t WHERE t.teaEmail = :teaEmail"),
    @NamedQuery(name = "Teacher.findByTeaDegignation", query = "SELECT t FROM Teacher t WHERE t.teaDegignation = :teaDegignation")})
public class Teacher implements Serializable {
    private static final long serialVersionUID = 1L;
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Basic(optional = false)
    @Column(name = "teacher_id")
    private Integer teacherId;
    @Basic(optional = false)
    @Column(name = "tea_code")
    private String teaCode;
    @Basic(optional = false)
    @Column(name = "tea_password")
    private String teaPassword;
    @Basic(optional = false)
    @Column(name = "tea_name")
    private String teaName;
    @Basic(optional = false)
    @Column(name = "tea_email")
    private String teaEmail;
    @Basic(optional = false)
    @Column(name = "tea_degignation")
    private String teaDegignation;
    @OneToMany(cascade = CascadeType.ALL, mappedBy = "caTeacherId")
    private List<CourseTaker> courseTakerList;
    @OneToMany(cascade = CascadeType.ALL, mappedBy = "tgTeacherId")
    private List<TeacherGroup> teacherGroupList;
    public Teacher() {
}

    // Some Constructors
    // Getters And Setters Ignored

    @XmlTransient
    public List<CourseTaker> getCourseTakerList() {
        return courseTakerList;
    }

    public void setCourseTakerList(List<CourseTaker> courseTakerList) {
        this.courseTakerList = courseTakerList;
    }

    @XmlTransient
    public List<TeacherGroup> getTeacherGroupList() {
        return teacherGroupList;
    }

    public void setTeacherGroupList(List<TeacherGroup> teacherGroupList) {
        this.teacherGroupList = teacherGroupList;
    }
}
public class CourseTakerService implements ICourseTakerService ,   LocatableService {

    private static Logger log = LogService.getLogger(CourseTakerService.class);

    public void init() {
    }
    public void destroy() {
    }
       /**
    * Adds a new courseTaker to the database.
    *
    * @param model a data object
    * @return CourseTaker a data object with the primary key
    */
    public subHibernate.entity.CourseTaker   addCourseTaker(subHibernate.entity.CourseTaker model) throws GenericBusinessException {
    subHibernate.HibernateQueryHelper hibernateTemplate = new subHibernate.HibernateQueryHelper();
    try {
        hibernateTemplate.save(model);
        return getCourseTaker(model.getPrimaryKey());
    } finally {
        log.debug("finished addCourseTaker(subHibernate.entity.CourseTaker model)");
    }
    /**
    *
    * Retrieves a list of data object for the specified caTeacherId field. To
    * use a wildcard search, use a % in the query.
    *
    * @param caTeacherId the field
    * @return List of CourseTaker data objects, empty list in case no results
    * were found.
    */
    public java.util.List findCourseTakerByCaTeacherId(java.lang.Integer caTeacherId) throws GenericBusinessException {
    subHibernate.HibernateQueryHelper hibernateTemplate = new subHibernate.HibernateQueryHelper();
    try {
        String queryString = "from " + CourseTaker.class.getName() + " e where e.caTeacherId like :caTeacherId ";
        // Add a an order by on all primary keys to assure reproducable results.
        String orderByPart = "";
        orderByPart += " order by e.courseTakerId";
        queryString += orderByPart;
        Query query = hibernateTemplate.createQuery(queryString);
        hibernateTemplate.setQueryParameter(query, "caTeacherId", caTeacherId);
        List list = hibernateTemplate.list(query);
        return list;
        } finally {
            log.debug("finished findCourseTakerByCaTeacherId(java.lang.Integer caTeacherId)");
        }
    }
}
当我调用
list=(list)courseTakerService.findCourseTakerByCaTeacherId(1)
它产生以下堆栈跟踪
[保证courseTaker表中有一行CourseTacheId=1]

27-Feb-2015 11:11:31.539获取hibernate查询列表时出错[http-nio-8084-exec-32]com.finalist.util.log.JDKLogger.ERROR错误。
org.hibernate.PropertyAccessException:无法通过subHibernate.entity.Teacher.teacherId的反射获取程序获取字段值
位于org.hibernate.property.DirectPropertyAccessor$DirectGetter.get(DirectPropertyAccessor.java:62)
位于org.hibernate.tuple.entity.AbstractEntityTuplizer.getIdentifier(AbstractEntityTuplizer.java:344)
位于org.hibernate.persister.entity.AbstractEntityPersister.getIdentifier(AbstractEntityPersister.java:4537)
位于org.hibernate.persister.entity.AbstractEntityPersister.isTransient(AbstractEntityPersister.java:4259)
位于org.hibernate.engine.internal.ForeignKeys.isTransient(ForeignKeys.java:209)
位于org.hibernate.engine.internal.ForeignKeys.getEntityIdentifierIfNotUnsaved(ForeignKeys.java:248)
位于org.hibernate.type.EntityType.getIdentifier(EntityType.java:510)
位于org.hibernate.type.ManyToOneType.nullSafeSet(ManyToOneType.java:174)
位于org.hibernate.param.NamedParameterSpecification.bind(NamedParameterSpecification.java:66)
位于org.hibernate.loader.hql.QueryLoader.bindParameterValues(QueryLoader.java:612)
位于org.hibernate.loader.loader.prepareQueryStatement(loader.java:1875)
位于org.hibernate.loader.loader.executeQueryStatement(loader.java:1836)
位于org.hibernate.loader.loader.executeQueryStatement(loader.java:1816)
位于org.hibernate.loader.loader.doQuery(loader.java:900)
在org.hibernate.loader.loader.doQueryAndInitializeNonLazyCollections(loader.java:342)上
位于org.hibernate.loader.loader.doList(loader.java:2526)
位于org.hibernate.loader.loader.doList(loader.java:2512)
位于org.hibernate.loader.loader.listIgnoreQueryCache(loader.java:2342)
位于org.hibernate.loader.loader.list(loader.java:2337)
位于org.hibernate.loader.hql.QueryLoader.list(QueryLoader.java:495)
位于org.hibernate.hql.internal.ast.QueryTranslatorImpl.list(QueryTranslatorImpl.java:357)
位于org.hibernate.engine.query.spi.HQLQueryPlan.performList(HQLQueryPlan.java:195)
位于org.hibernate.internal.SessionImpl.list(SessionImpl.java:1269)
位于org.hibernate.internal.QueryImpl.list(QueryImpl.java:101)
位于subHibernate.HibernateQueryHelper.list(HibernateQueryHelper.java:94)
位于subHibernate.session.CourseTakerService.FindCourseTakerByCatacheId(CourseTakerService.java:270)
在OffisAssignServlet.processRequest(OffisAssignServlet.java:116)
在OffiAssignServlet.doPost(OffiAssignServlet.java:174)
位于javax.servlet.http.HttpServlet.service(HttpServlet.java:644)
位于javax.servlet.http.HttpServlet.service(HttpServlet.java:725)
位于org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:301)
位于org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
位于org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
位于org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:239)
位于org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
位于org.netbeans.modules.web.monitor.server.MonitorFilter.doFilter(MonitorFilter.java:393)
位于org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:239)
位于org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
位于org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:219)
位于org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:106)
位于org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:503)
位于org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:136)
位于org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:74)
位于org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:610)
位于org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:88)
位于org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:516)
位于org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1015)
位于org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:652)
位于org.apache.coyote.http11.Http11NioProtocol$Http11ConnectionHandler.process(Http11NioProtocol.java:222)
位于org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1575)
位于org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.run(NioEndpoint.java:1533)
位于java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
位于java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
运行(Thread.java:745)
原因:java.lang.IllegalArgumentException:无法将java.lang.Integer字段subHibernate.entity.Teacher.teacherId设置为java.lang.Integer
在sun.reflect.UnsafeFieldAccessorImpl.throwsetilegalargumentexception(UnsafeFieldAccessorImpl.java:167)处
在sun.reflect.UnsafeFieldAccessorImpl.throwsetilegalargumentexception(UnsafeFieldAccessorImpl.java:171)中
在阳光下。反射。不安全现场附件安装(U
public class CourseTakerService implements ICourseTakerService ,   LocatableService {

    private static Logger log = LogService.getLogger(CourseTakerService.class);

    public void init() {
    }
    public void destroy() {
    }
       /**
    * Adds a new courseTaker to the database.
    *
    * @param model a data object
    * @return CourseTaker a data object with the primary key
    */
    public subHibernate.entity.CourseTaker   addCourseTaker(subHibernate.entity.CourseTaker model) throws GenericBusinessException {
    subHibernate.HibernateQueryHelper hibernateTemplate = new subHibernate.HibernateQueryHelper();
    try {
        hibernateTemplate.save(model);
        return getCourseTaker(model.getPrimaryKey());
    } finally {
        log.debug("finished addCourseTaker(subHibernate.entity.CourseTaker model)");
    }
    /**
    *
    * Retrieves a list of data object for the specified caTeacherId field. To
    * use a wildcard search, use a % in the query.
    *
    * @param caTeacherId the field
    * @return List of CourseTaker data objects, empty list in case no results
    * were found.
    */
    public java.util.List findCourseTakerByCaTeacherId(java.lang.Integer caTeacherId) throws GenericBusinessException {
    subHibernate.HibernateQueryHelper hibernateTemplate = new subHibernate.HibernateQueryHelper();
    try {
        String queryString = "from " + CourseTaker.class.getName() + " e where e.caTeacherId like :caTeacherId ";
        // Add a an order by on all primary keys to assure reproducable results.
        String orderByPart = "";
        orderByPart += " order by e.courseTakerId";
        queryString += orderByPart;
        Query query = hibernateTemplate.createQuery(queryString);
        hibernateTemplate.setQueryParameter(query, "caTeacherId", caTeacherId);
        List list = hibernateTemplate.list(query);
        return list;
        } finally {
            log.debug("finished findCourseTakerByCaTeacherId(java.lang.Integer caTeacherId)");
        }
    }
}
    String queryString = "from " + CourseTaker.class.getName() + " e where e.caTeacherId.teacherId like :caTeacherId ";