public class ResultAction extends ActionSupport{
private List<StudentLesson> studentlessonlist;


@Override
public String execute() throws Exception {
studentlessonlist=new ArrayList<StudentLesson>();
DbOperate db=new DbOperate();
List list=db.queryStudentLesson();
Iterator iterator=list.iterator();
while(iterator.hasNext()){
StudentLesson studentlesson=(StudentLesson) iterator.next();
System.out.println(studentlesson.getId());
System.out.println(studentlesson);
System.out.println(studentlesson.getRes1());
System.out.println(studentlesson.getRes2());
System.out.println(studentlesson.getRes3());
System.out.println(studentlesson.getRes4());
System.out.println(studentlesson.getRes5());
System.out.println(studentlesson.getRes6());
studentlessonlist.add(studentlesson);
}


return SUCCESS;
}
public List<StudentLesson> getStudentlessonlist() {
return studentlessonlist;
}
public void setStudentlessonlist(List<StudentLesson> studentlessonlist) {
this.studentlessonlist = studentlessonlist;
}这是DbOperate的类
public List queryStudentLesson(){//查询所有成绩单
List list=null;
String str="from StudentLesson ";
Transaction tx=null;
Session session=HibernateSessionFactory.getSession();
try {
tx=session.beginTransaction();
tx.begin();
Query query=session.createQuery(str);
list=query.list();
tx.commit();
} catch (HibernateException e) {
if(tx!=null){
tx.rollback();
}
throw e;
}
return list;
}
用test类查询可以查询到
public static void main(String[] args) {
DbOperate db=new DbOperate();
List list=db.queryStudentLesson();
Iterator iterator=list.iterator();
while(iterator.hasNext()){
StudentLesson studentlesson=(StudentLesson) iterator.next();
System.out.println("name:"+studentlesson.getStudent().getName()+"lesson:"+studentlesson.getLesson().getName()
+"成绩1:"+studentlesson.getRes1()+"成绩2:"+studentlesson.getRes2()+"成绩3:"+studentlesson.getRes3()
+"成绩4:"+studentlesson.getRes4()+"成绩5:"+studentlesson.getRes5()
+"成绩6:"+studentlesson.getRes6());

}
}
可以正常显示
但用网页,studentlesson除了getId可以显示,其他属性都为null

解决方案 »

  1.   

    用test可以读取数据库数据,但用网页请求,除了id被读出来,其他的属性都为null
      

  2.   

    看一下你在execute()的list是否为空。
      

  3.   

    不为空,可以查出id,其他属性为null,这是我最费解的一点。用main函数重新查找了一下,控制台都能显示各属性
      

  4.   

    还有public List queryStudentLesson(){//查询所有成绩单
    String str="from StudentLesson ";
    你这个方法最好写为public List<StudentLesson> queryStudentLesson()
    这样自动转换类型。我认为你在action中的list里面是Object而不是StudentLesson,重新定义方法之后你在action中获取list的时候用private List<StudentLesson> studentlessonlist;去获取;不要用List list去获取。
      

  5.   

    我按你说的改了,还是除了id都是null,我在数据库有两条记录。最重要的是为什么id能查出来...
    1
    null
    null
    null
    null
    null
    null
    2
    null
    null
    null
    null
    null
    null
      

  6.   

    你的struts没有问题。有问题的是你的POJO类或者hbm.xml配置文件。自己检查下。
      

  7.   

    这是映射文件,三张表student lesson student_lesson 我生成了一个测试类调用DbOperate.queryStudentLesson(),可以查出数据来,麻烦帮我看看,谢谢了
    <?xml version="1.0" encoding="utf-8"?>
    <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
    "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
    <hibernate-mapping >
    <class name="com.bean.Lesson" table="lesson" >
    <id name="id" type="java.lang.Integer">
    <generator class="increment"/>
    </id>
    <property name="name"/>
    </class>

    <class name="com.bean.Student" table="student">
    <id name="id" type="java.lang.Integer">
    <generator class="increment"/>
    </id>
    <property name="name"/>
    <set name="lessons">
    <key column="id"></key>
    <one-to-many class="com.bean.Lesson"/>
    </set>
    <set name="studentlessons">
    <key column="id"></key>
    <one-to-many class="com.bean.StudentLesson"/>
    </set>
    </class>

    <class name="com.bean.StudentLesson" table="student_lesson">
    <id name="id" type="java.lang.Integer">
    <generator class="increment"/>
    </id>

    <property name="res1" column="res_1"/>
    <property name="res2" column="res_2"/>
    <property name="res3" column="res_3"/>
    <property name="res4" column="res_4"/>
    <property name="res5" column="res_5"/>
    <property name="res6" column="res_6"/>

    <many-to-one name="student" class="com.bean.Student" column="student_id" cascade="save-update" not-null="true"></many-to-one>
    <many-to-one name="lesson" class="com.bean.Lesson" column="lesson_id" cascade="save-update" not-null="true"></many-to-one>
    </class>



    </hibernate-mapping>
      

  8.   

    这是POJO类StudentLesson
    package com.bean;public class StudentLesson {
    private int id;
    private Lesson  lesson;
    private Student student;
    private String res1;
    private String res2;
    private String res3;
    private String res4;
    private String res5;
    private String res6;
    private String avg;
    public int getId() {
    return id;
    }
    public void setId(int id) {
    this.id = id;
    }
    public Lesson getLesson() {
    return lesson;
    }
    public void setLesson(Lesson lesson) {
    this.lesson = lesson;
    }public Student getStudent() {
    return student;
    }
    public void setStudent(Student student) {
    this.student = student;
    }
    public String getRes1() {
    return res1;
    }
    public void setRes1(String res1) {
    this.res1 = res1;
    }
    public String getRes2() {
    return res2;
    }
    public void setRes2(String res2) {
    this.res2 = res2;
    }
    public String getRes3() {
    return res3;
    }
    public void setRes3(String res3) {
    this.res3 = res3;
    }
    public String getRes4() {
    return res4;
    }
    public void setRes4(String res4) {
    this.res4 = res4;
    }
    public String getRes5() {
    return res5;
    }
    public void setRes5(String res5) {
    this.res5 = res5;
    }
    public String getRes6() {
    return res6;
    }
    public void setRes6(String res6) {
    this.res6 = res6;
    }
    public String getAvg() {
    return avg;
    }
    public void setAvg(String avg) {
    this.avg = avg;
    }
    }
      

  9.   

    你检查一下,你数据库里建的表的字段类型 有没有hibernate不支持的类型!有的话会出现你用sql去DB里去去没问题,但一运行source就会取不到数据了!
      

  10.   

    应该不会啊,我的id用的是int 类型,成绩res_1,res_2等用的double 类型,怎么回事呢
      

  11.   

    可能就出在action的list里面,调试调试  看一下List里面的结构
      

  12.   

    先报一个这个异常,然后除了id取不出数据
    java.lang.NullPointerException
    org.hibernate.tuple.AbstractEntityTuplizer.createProxy(AbstractEntityTuplizer.java:372)
    org.hibernate.persister.entity.AbstractEntityPersister.createProxy(AbstractEntityPersister.java:3121)
    org.hibernate.event.def.DefaultLoadEventListener.createProxyIfNecessary(DefaultLoadEventListener.java:232)
    org.hibernate.event.def.DefaultLoadEventListener.proxyOrLoad(DefaultLoadEventListener.java:173)
    org.hibernate.event.def.DefaultLoadEventListener.onLoad(DefaultLoadEventListener.java:87)
    org.hibernate.impl.SessionImpl.fireLoad(SessionImpl.java:862)
    org.hibernate.impl.SessionImpl.internalLoad(SessionImpl.java:830)
    org.hibernate.type.EntityType.resolveIdentifier(EntityType.java:266)
    org.hibernate.type.EntityType.resolve(EntityType.java:303)
    org.hibernate.engine.TwoPhaseLoad.initializeEntity(TwoPhaseLoad.java:116)
    org.hibernate.loader.Loader.initializeEntitiesAndCollections(Loader.java:842)
    org.hibernate.loader.Loader.doQuery(Loader.java:717)
    org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:224)
    org.hibernate.loader.Loader.doList(Loader.java:2145)
    org.hibernate.loader.Loader.listIgnoreQueryCache(Loader.java:2029)
    org.hibernate.loader.Loader.list(Loader.java:2024)
    org.hibernate.loader.hql.QueryLoader.list(QueryLoader.java:375)
    org.hibernate.hql.ast.QueryTranslatorImpl.list(QueryTranslatorImpl.java:308)
    org.hibernate.engine.query.HQLQueryPlan.performList(HQLQueryPlan.java:153)
    org.hibernate.impl.SessionImpl.list(SessionImpl.java:1106)
    org.hibernate.impl.QueryImpl.list(QueryImpl.java:79)
    com.dao.DbOperate.queryStudentLesson(DbOperate.java:82)
    com.action.ResultAction.execute(ResultAction.java:22)
    sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
    sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
    java.lang.reflect.Method.invoke(Unknown Source)
    com.opensymphony.xwork2.DefaultActionInvocation.invokeAction(DefaultActionInvocation.java:452)
    com.opensymphony.xwork2.DefaultActionInvocation.invokeActionOnly(DefaultActionInvocation.java:291)
    com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:254)
    com.opensymphony.xwork2.interceptor.DefaultWorkflowInterceptor.doIntercept(DefaultWorkflowInterceptor.java:176)
    com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98)
    com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)
    com.opensymphony.xwork2.validator.ValidationInterceptor.doIntercept(ValidationInterceptor.java:263)
    org.apache.struts2.interceptor.validation.AnnotationValidationInterceptor.doIntercept(AnnotationValidationInterceptor.java:68)
    com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98)
    com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)
    com.opensymphony.xwork2.interceptor.ConversionErrorInterceptor.intercept(ConversionErrorInterceptor.java:133)
    com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)
    com.opensymphony.xwork2.interceptor.ParametersInterceptor.doIntercept(ParametersInterceptor.java:207)
    com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98)
    com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)
    com.opensymphony.xwork2.interceptor.ParametersInterceptor.doIntercept(ParametersInterceptor.java:207)
    com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98)
    com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)
    com.opensymphony.xwork2.interceptor.StaticParametersInterceptor.intercept(StaticParametersInterceptor.java:190)
    com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)
    org.apache.struts2.interceptor.MultiselectInterceptor.intercept(MultiselectInterceptor.java:75)
    com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)
    org.apache.struts2.interceptor.CheckboxInterceptor.intercept(CheckboxInterceptor.java:94)
    com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)
    org.apache.struts2.interceptor.FileUploadInterceptor.intercept(FileUploadInterceptor.java:243)
    com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)
    com.opensymphony.xwork2.interceptor.ModelDrivenInterceptor.intercept(ModelDrivenInterceptor.java:100)
    com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)
    com.opensymphony.xwork2.interceptor.ScopedModelDrivenInterceptor.intercept(ScopedModelDrivenInterceptor.java:141)
    com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)
    org.apache.struts2.interceptor.debugging.DebuggingInterceptor.intercept(DebuggingInterceptor.java:270)
    com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)
    com.opensymphony.xwork2.interceptor.ChainingInterceptor.intercept(ChainingInterceptor.java:145)
    com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)
    com.opensymphony.xwork2.interceptor.PrepareInterceptor.doIntercept(PrepareInterceptor.java:171)
    com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98)
    com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)
    com.opensymphony.xwork2.interceptor.I18nInterceptor.intercept(I18nInterceptor.java:176)
    com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)
    org.apache.struts2.interceptor.ServletConfigInterceptor.intercept(ServletConfigInterceptor.java:164)
    com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)
    com.opensymphony.xwork2.interceptor.AliasInterceptor.intercept(AliasInterceptor.java:190)
    com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)
    com.opensymphony.xwork2.interceptor.ExceptionMappingInterceptor.intercept(ExceptionMappingInterceptor.java:187)
    com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)
    org.apache.struts2.impl.StrutsActionProxy.execute(StrutsActionProxy.java:52)
    org.apache.struts2.dispatcher.Dispatcher.serviceAction(Dispatcher.java:498)
    org.apache.struts2.dispatcher.ng.ExecuteOperations.executeAction(ExecuteOperations.java:77)
    org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter.doFilter(StrutsPrepareAndExecuteFilter.java:91)
      

  13.   

    我找到错误了http://www.cnblogs.com/panjun-Donet/archive/2008/11/10/1330471.html,坑爹的Hibernate