Управление списком результатов из org.hibernate.Query.list при использовании объединенного подкласса - PullRequest
1 голос
/ 22 февраля 2011

У меня есть класс 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.

Существует ли какая-либо альтернатива проверке этого случая вручную, например, с использованием какого-либо другого метода возврата списка,где каждый объект представляет отдельного пользователя также, когда размер списка равен единице?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...