本帖最后由 function_chk 于 2009-08-03 14:40:36 编辑

解决方案 »

  1.   

    都能获得room了 还得不到address啊 
    贴出你的页面代码和两个实体的代码看看
      

  2.   

    谢谢楼上的回答, JSP遍历两个表, 返回应该是
    Student                    room
    id, name, room_id          id, address
    现在ognl去遍历, 只遍历到student中的内容, 遍历不到room表中的内容
      

  3.   

    EL表达式中${student.room.address}不就行了
      

  4.   

    Room{
     private int id;
        private String address;
    }
    这 里没有一对多.你怎么取得对象.
    String str = "from Student";
        Query query = session.createQuery(str);
        Iterator it = query.list().iterator();
        while(it.hasNext()){
            Student st = (Student)it.next();
            System.out.print(st.getId());
            System.out.print(st.getName());            
            System.out.print(st.getRoom().getId());
            System.out.print(st.getRoom().getAddress());
        }
    因为这里的session 没有关闭(没有看到session.close()至少在getRoom().getAddress()).所以你可以取得 st.getRoom() ,它应该是又发一条SQL查询了.
    Dao返回: List list = getHibernateTemplate().find("from Student");
    这里查询的是学生.也就是你查到学生表,然后SESSION就关了.如果要得到房间,那就要再发一条SQL查询.但这里SESSION关闭了.无法得到.你要配置hbm.xml 里.
    <many-to-one name="room" lazy="false" fetch="join" class="xx.Room">
                <column name="roomid"/>
            </many-to-one>
      

  5.   

    student里面价格room的属性就好了哈
    private Room  room;
      

  6.   

    谢谢archko
    这是我的many-to-one代码
    <hibernate-mapping>
    <class name="tables.Student" table="student">
    <id name="id" column="id">
    <generator class="native"/>
    </id>
    <property name="name"       column="name" />

    <many-to-one name="room" 
                 column="room_id" 
                 class="tables.Room"
                 cascade="all"
                 outer-join="true" />              
    </class>
    </hibernate-mapping>然后遍历${student.room.address}还是空, 换成你的many-to-one代码还是一样, 是不是student.room.address这格式不对呢? 应该怎么写?
      

  7.   

    lazy="false" 默认延迟加载=true,不会查关联的表
      

  8.   

    回nangonghaopeng, student里已有room属性了
    public class Student {    private int id;
        private String name;
        private Room room;还是取不到
      

  9.   

    回gukuitian, 好像lazy是有点问题, 我把lazy改为false, 那就一点东西都遍历不到了,原来还可以遍历到student中的内容.  如果把lazy改为true, 则提示Error reading 'address' on type tables.Room$$EnhancerByCGLIB$$9e389c32   
    org.hibernate.LazyInitializationException: could not initialize proxy - no Session
      

  10.   

    那你试试在action里面能不能获得room的信息(id和address)
      

  11.   

    你的room实体类里面要写一个set<student> student的 
      

  12.   

    lazy=false怎么会一点东西没有呢?这和student有什么关系.这是延迟加载是加载Room的东西.当你需要取得student.Room.address时它才有用到.
    lazy='true' 出错是正常的.
    最好是你把生成的SQL拿出来看看.这个不难吧.
      

  13.   

    public class FindDaoHibernate extends HibernateDaoSupport implements FindDao{

    public List find(){
    List query = getHibernateTemplate().find("from Student");
    }
      

  14.   

    是生成的SQL不是这个.没有东西,至少也有错误吧.
      

  15.   

    如果写法没有错误,取不到值是因为session关闭了 所以取不到了 public List find(){
            List query = super.getSession().createQuery("from Student");
        }    
    这样子试试看
      

  16.   

    谢谢所有热心人的指点, 这个lazy=false真的起作用了, 最后检查到是我的数据库有问题, 所以遍历不到东西, 经修改现在已经好了, 谢谢大家.