三个表:
User:
  ID
  UserLevelID 
  UserGenderIDUserLevel:
  ID
  NameUserGender:
  ID
  Name通过SQL语句根据得到User ID得到UserLevel Name和UserGender Name如下
select a.ID, b.Name, C.Name from User as a 
  left join UserLevel as b on a.UserLevelID = b.ID
  left join UserGender as c on a.UserGenderID = c.ID
请问通过HQL如何得到同样的结果? 谢谢!// user.hbm.xml:
<hibernate-mapping package="mwgalaxy.model">
  <class name="User"  table="usertable">
    <id name="id" column="ID">
      <generator class="identity"/>
    </id>
    <property name="ulid" column="UserLevelID" not-null="true" length="32"/>
    <property name="ugid" column="UserGenderID" not-null="true" length="32"/>
  </class>
</hibernate-mapping>
...
// userlevel.hbm.xml:
<hibernate-mapping package="mwgalaxy.model">
  <class name="UserLevel"  table="userleveltable">
    <id name="id" column="ID">
      <generator class="identity"/>
    </id>
    <property name="name" column="Name" not-null="true" length="64"/>
  </class>
</hibernate-mapping>
...// XXX.java
  hql = ????;
  Session session = HibernateUtil.currentSession();
  tx = session.beginTransaction();
  Query query = session.createQuery(hql);

解决方案 »

  1.   

    你这样应用hql 没有完全使用面向对象的方法  所以查询要使用连接  这个我也不太清楚
      如果你的实体使用了关联映射的话 你只要查询到 User 就可以吧与它相关联的UserLevel、UserGender
    自动查询出来  就没必要写连接查询语句了
       本人建议使用关联映射解决这个问题
      

  2.   

    用hibernate原生sql  可以执行sql语句createSQLQuery
      

  3.   

    1:用hibernate原生sql  2:在实体文件里配一个lazy=false,就可以用对象化得语句来得到。自己查查。
      

  4.   

    如果只是想要几个属性的话完全可以用formula来做 而且如果你的实体加了关联的话你也可以通过关联来获取 hibernate没有你想想的那么灵活
      

  5.   

    1. lazy=false
    2. getUser().getUserLevel().getName();
       getUser().getUserGender().getName();或者:
    1. 原生SQL.