我有一个 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 对象,代表同一个用户。这是一个问题,例如当调用方法期望每个列表项是不同的、唯一的用户对象时。
是否有一些替代方法可以手动检查这种情况,例如使用其他返回列表的方法,其中每个对象也代表不同的用户,当列表大小为一个时?