hibernate映射问题

cleverman8 2012-01-21 10:04:14
我毕业设计是教学管理系统,用的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.id

File: org/hibernate/property/BasicPropertyAccessor.java
Line number: 195

org.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,不知道为什么


问题可能比较麻烦,谢谢那些看到尾的朋友,也许您没法提供帮助,但还是感谢每一个进贴的人。

如果可以,请说的详细点。

过年了,祝大家心想事成!
...全文
162 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
wenjie4892543 2012-02-02
  • 打赏
  • 举报
回复
object is not an instance of declaring class
对象不是一个已经声明实例的类
IllegalArgumentException occurred calling getter of edu.bwu.graduate.modul.Teacher.id
Teacher.id出现IllegalArgumentException 大概是这样

问题不够明确
建议:用表生成实体和xml文件好点!!

hollin1988 2012-01-25
  • 打赏
  • 举报
回复
你的Schedule类,进度类里面的配置应该是这样的吧
<many-to-one name="t" class="teacher" cascade="save-update"/>

67,513

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧