У меня есть класс User, который сопоставлен с таблицей "USERS" в базе данных с помощью Hibernate.Существует также класс 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,представляющий того же пользователя.Это проблема, например, когда вызывающий метод ожидает, что каждый элемент списка будет другим, уникальным объектом User.
Существует ли какая-либо альтернатива проверке этого случая вручную, например, с использованием какого-либо другого метода возврата списка,где каждый объект представляет отдельного пользователя также, когда размер списка равен единице?