我毕业设计是教学管理系统,用的struts2+hibernate,hibernate用的xdoclet生成的配置文件和映射,可是没用过hibernate,所以出现了映射的问题。
有三个类老师,学生,和老师课程的计划类,有一个页面需要展示,老师这学期的每周教学计划,老师登录的时候,teacher存到了session中,但是当点击查看教学进度时,想拿到该老师的对象,然后根据映射传给课程计划这个类,去取数据,出问题了。我把代码和错误贴出来,希望大家帮我解决一下。
Schedule类,进度类
<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"><hibernate-mapping>
  <class table="T_schedule" name="edu.bwu.graduate.modul.Schedule">
    <id name="id">
      <generator class="native"/>
    </id>
    <many-to-one name="t"/>
    <property name="className"/>
    <property name="content"/>
  </class>
</hibernate-mapping>teacher类
<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"><hibernate-mapping>
  <class table="T_Teacher" name="edu.bwu.graduate.modul.Teacher">
    <id name="id">
      <generator class="native"/>
    </id>
    <property name="password"/>
    <property name="teacherName"/>
    <property name="username"/>
  </class>
</hibernate-mapping>不知道我这么生成映射合理不?不合理,应该怎么生成?action:public String execute() throws Exception {

Teacher t = null;
TeacherManager tman = new TeacherManager();
if(!session.containsKey("teacher")){
return "tologin";
}
t = (Teacher)session.get("teacher");
List schedules = (List) tman.getSchedule(t);
request.put("schedules", schedules);

return "toschedules";
其中,TeacherManager是负责数据库方面的操作的,封装了一些方法
TeacherManager部分方法:
public Collection getSchedule(Teacher t){
System.out.println(t.getId());
List list = session.createCriteria(Schedule.class).add(Restrictions.eq("t", t.getId())).list();

return list;
}
错误发生在session.createCriteria中的t拿到teacher的id,teacher和Schedule是一对多的,不知道一对多,是不是给t传teacher的id,还是传teacher对象?错误:Struts has detected an unhandled exception:
Messages:      object is not an instance of declaring class
    IllegalArgumentException occurred calling getter of edu.bwu.graduate.modul.Teacher.idFile:  org/hibernate/property/BasicPropertyAccessor.java
Line number:  195org.hibernate.PropertyAccessException: IllegalArgumentException occurred calling getter of edu.bwu.graduate.modul.Teacher.id    org.hibernate.property.BasicPropertyAccessor$BasicGetter.get(BasicPropertyAccessor.java:195)
    org.hibernate.tuple.entity.AbstractEntityTuplizer.getIdentifier(AbstractEntityTuplizer.java:199)
    org.hibernate.persister.entity.AbstractEntityPersister.getIdentifier(AbstractEntityPersister.java:3605)
    org.hibernate.persister.entity.AbstractEntityPersister.isTransient(AbstractEntityPersister.java:3321)
    org.hibernate.engine.ForeignKeys.isTransient(ForeignKeys.java:204)
    org.hibernate.engine.ForeignKeys.getEntityIdentifierIfNotUnsaved(ForeignKeys.java:241)
    org.hibernate.type.EntityType.getIdentifier(EntityType.java:430)
    org.hibernate.type.ManyToOneType.nullSafeSet(ManyToOneType.java:110)
    org.hibernate.loader.Loader.bindPositionalParameters(Loader.java:1732)
    org.hibernate.loader.Loader.bindParameterValues(Loader.java:1703)
    org.hibernate.loader.Loader.prepareQueryStatement(Loader.java:1593)
    org.hibernate.loader.Loader.doQuery(Loader.java:696)
    org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:259)
    org.hibernate.loader.Loader.doList(Loader.java:2232)
    org.hibernate.loader.Loader.listIgnoreQueryCache(Loader.java:2129)
    org.hibernate.loader.Loader.list(Loader.java:2124)
    org.hibernate.loader.criteria.CriteriaLoader.list(CriteriaLoader.java:118)
    org.hibernate.impl.SessionImpl.list(SessionImpl.java:1597)
    org.hibernate.impl.CriteriaImpl.list(CriteriaImpl.java:306)
    edu.bwu.graduate.manager.TeacherManager.getSchedule(TeacherManager.java:45)
    edu.bwu.graduate.action.CouseAction.execute(CouseAction.java:32)java.lang.IllegalArgumentException: object is not an instance of declaring class    sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
    sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    java.lang.reflect.Method.invoke(Method.java:597)
    org.hibernate.property.BasicPropertyAccessor$BasicGetter.get(BasicPropertyAccessor.java:169)
    org.hibernate.tuple.entity.AbstractEntityTuplizer.getIdentifier(AbstractEntityTuplizer.java:199)
    org.hibernate.persister.entity.AbstractEntityPersister.getIdentifier(AbstractEntityPersister.java:3605)
    org.hibernate.persister.entity.AbstractEntityPersister.isTransient(AbstractEntityPersister.java:3321)
    org.hibernate.engine.ForeignKeys.isTransient(ForeignKeys.java:204)
    org.hibernate.engine.ForeignKeys.getEntityIdentifierIfNotUnsaved(ForeignKeys.java:241)
    org.hibernate.type.EntityType.getIdentifier(EntityType.java:430)
    org.hibernate.type.ManyToOneType.nullSafeSet(ManyToOneType.java:110)
    org.hibernate.loader.Loader.bindPositionalParameters(Loader.java:1732)
    org.hibernate.loader.Loader.bindParameterValues(Loader.java:1703)
    org.hibernate.loader.Loader.prepareQueryStatement(Loader.java:1593)
    org.hibernate.loader.Loader.doQuery(Loader.java:696)
    org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:259)
    org.hibernate.loader.Loader.doList(Loader.java:2232)
    org.hibernate.loader.Loader.listIgnoreQueryCache(Loader.java:2129)
    org.hibernate.loader.Loader.list(Loader.java:2124)
    org.hibernate.loader.criteria.CriteriaLoader.list(CriteriaLoader.java:118)
    org.hibernate.impl.SessionImpl.list(SessionImpl.java:1597)
    org.hibernate.impl.CriteriaImpl.list(CriteriaImpl.java:306)
    edu.bwu.graduate.manager.TeacherManager.getSchedule(TeacherManager.java:45)
    edu.bwu.graduate.action.CouseAction.execute(CouseAction.java:32)都是截到了我写的包出错的位置,另外,我的hibernate不能正常建表,有了上面的配置文件和映射文件,我前些天写的teacher类,在启动tomcat时候自动见表了,可是今天写的schedule就没有在启动tomcat时候自动见表,配置里面有写update
此外,还有一个问题,我再session里面存了session MAp 类继承了sessionware,也谢了set方法,可是在取session中的对象时,不知道为什么总反馈回来teacher=edu.bwu.graduate.modul.Teacher@11e6003中的value,不知道为什么
问题可能比较麻烦,谢谢那些看到尾的朋友,也许您没法提供帮助,但还是感谢每一个进贴的人。如果可以,请说的详细点。过年了,祝大家心想事成!

解决方案 »

  1.   

    你的Schedule类,进度类里面的配置应该是这样的吧
    <many-to-one name="t" class="teacher" cascade="save-update"/>
      

  2.   

    object is not an instance of declaring class
    对象不是一个已经声明实例的类
      IllegalArgumentException occurred calling getter of edu.bwu.graduate.modul.Teacher.id
    Teacher.id出现IllegalArgumentException   大概是这样问题不够明确
    建议:用表生成实体和xml文件好点!!