1

我有一个 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 对象,其中每个项目都是 User 或 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 对象,代表同一个用户。这是一个问题,例如当调用方法期望每个列表项是不同的、唯一的用户对象时。

是否有一些替代方法可以手动检查这种情况,例如使用其他返回列表的方法,其中每个对象也代表不同的用户,当列表大小为一个时?

4

0 回答 0