我有一个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时,每个对象代表不同的用户?