使用join子类时从org.hibernate.Query.list控制结果列表

时间:2011-02-22 14:28:27

标签: java hibernate joined-subclass

我有一个User类,它使用Hibernate映射到数据库中的“USERS”表。还有一个ApplicationUser类,它扩展了User类,并在Hibernate中作为连接子类映射到数据库表“APPLICATIONUSERS”。像这样:


public class User implements Serializable {
   //properties, getters, setters omitted for readability
}

public class ApplicationUser extends User implements Serializable {
   //properties, getters, setters omitted for readability
}

<hibernate-mapping package="com.initech.domain">
 <class name="com.initech.domain.User" table="USERS">
   <!-- properties omitted for readability -->
   <joined-subclass name="com.initech.domain.ApplicationUser" table="APPLICATIONUSERS">
    <!-- properties omitted for readability -->
   </joined-subclass>        
  </class>
</hibernate-mapping>

我遇到的问题是,当我得到一个用户列表(其中一些可能是“普通”用户和一些应用程序用户)时,一切正常 - 我得到一个List对象,其中每个项目都是用户或ApplicationUser对象。方法(简化了一下,可能包含拼写错误):


public  List findUsersByLoginName(String argLoginName){
  StringBuilder sb = new StringBuilder("from User user where lower(user.loginName) = :argLoginName");
  Query myQuery = this.sessionFactory.getCurrentSession().createQuery(sb.toString());
  myQuery.setString("argLoginName", argLoginName.toLowerCase());
  List userList = myQuery.list();
  return userList;
}

但是,如果只找到一个用户,谁是ApplicationUser,则该列表包含两个对象:一个User对象和一个ApplicationUser对象,代表同一个用户。这是一个问题,例如当调用方法期望每个列表项是一个不同的唯一User对象时。

是否可以手动检查此案例,例如使用其他一些返回列表的方法,当列表大小为1时,每个对象代表不同的用户?

0 个答案:

没有答案