我有两个实体:
Movie和Score
他们是一对一的关系,即每个电影有一个评分在xml中映射:
Movie对Score按照many-to-one映射
Score对Movie也按照many-to-one映射但是现在问题出现了,用hql查询的时候
from Movie m where m.sort.id=1 order by m.score.count desc;不能查询出来结果,List是空的(count是score中的int普通字段)
from Movie m where m.sort.id=1 order by m.score.id desc;确可以查询出来结果....其中id是score的主键,int型

解决方案 »

  1.   

    用load或get可以吗
    对应的属性的getter , setter有嘛?
      

  2.   

    hql写成:select m.score.id,m.score.count from Movie m where m.sort.id=1 order by m.score.count desc
    这样试试可以不,将你把需要查询出的列一个一个写出来。
      

  3.   

    我需要的是Movie列表啊.....望明示!
      

  4.   

    一对一的关系怎么映射MANY TO ONE呢? 能获得ID 却不能获得其他的属性? 跟延迟加载有关系么?
      

  5.   

    打开show sql选项,看生成的sql是什么?
      

  6.   

    配置文件中show sql那个设为true看看打印的sql是什么吧。
    可能是你的Score对应的配置文件count字段有点问题
      

  7.   

    show_sql查询出来的语句是:
    Hibernate: select movie0_.id as id10_, movie0_.name as name10_, movie0_.info as info10_, movie0_.actor as actor10_, movie0_.scoreId as scoreId10_, movie0_.sortId as sortId10_, movie0_.place as place10_, movie0_.count as count10_, movie0_.imageName as imageName10_, movie0_.movieNames as movieNames10_, movie0_.pdate as pdate10_ from t_movie movie0_, t_score score1_ where movie0_.scoreId=score1_.id and (movie0_.sortId in (1 , 2)) order by score1_.averageScore desc limit ?有点复杂哈..关键是最后面的
      

  8.   

    这个是用score.averageScore 查询时的sql语句
    select ... from t_movie movie0_, t_score score1_ where movie0_.scoreId=score1_.id and (movie0_.sortId in (1 , 2)) order by score1_.averageScore desc limit ? 这个是用score.id查询时的sql语句
    select ... from t_movie movie0_ where movie0_.sortId in (1 , 2) order by movie0_.scoreId desc limit ?
      

  9.   

    order by score1_.averageScore 他貌似调用了你的查询了吧? 
      

  10.   

    Hibernate一对一关联用one-to-one。估计你的Score的id在Movie里是外键,如果用第一种方式score.count属性不在Movie表中,不能order by第二种方式score.id是Movie表的一个字段,当然可以实现排序查询。
      

  11.   

    我换成one-to-one也不行,我觉得应该是5楼的兄弟说的延迟加载的问题,
    但是怎么解决呢??
    我是新手,望指教!
      

  12.   

    on-to-many的配置中有个属性,lazy=false
    应该不是这个问题吧
      

  13.   

    你把这sql直接拿数据库里运行一下,看看有值没,
      

  14.   

    我感觉不是延迟加载的 你可以先实验下 先把lazy设置成false