Найти конкретный класс, используя динамическое выражение (где экземпляр класса передается в DAO) - PullRequest
0 голосов
/ 11 июня 2009

У меня есть подпись этого метода:

public int nrOfEntities(Class<? extends MailConfirmation> clazz, User user, String email)

Я бы хотел, чтобы nrOfEntities возвращал количество сущностей, которые:

  • Из бетона класса клац
  • Иметь подходящего пользователя, если пользователь! = Null
  • Получите соответствующий адрес электронной почты, если пользователь == null

У меня проблема с сопоставлением классов. Я попробовал несколько утверждений без всякой удачи.

Ответы [ 3 ]

1 голос
/ 11 июня 2009

Может ли клац иметь подтипы, которые не должны учитываться?

Если нет, то не достаточно ли создать запрос на clazz?

Criteria criteria = session.createCriteria(clazz);
if (user == null) {
    criteria.add(Restrictions.eq("email", email);
} else {
    criteria.add(Restrictions.eq("user", user);
}
int result = (Integer) criteria.setProjection(Projections.rowCount()).uniqueResult();

Теперь я угадываю, как выглядит ваше отображение (что есть свойства "email" и "user").

Если это не работает, я знаю, что есть псевдо-свойство с именем "class", по крайней мере, в HQL. Может быть, вы можете поэкспериментировать с этим.

0 голосов
/ 11 июня 2009

Вы ищете "from " + clazz.getSimpleName() + " where ..."?

0 голосов
/ 11 июня 2009

Если вы хотите проверить класс объекта, вы можете использовать что-то вроде следующего:

Object entity = ... // Get the entity however
boolean matchesClass = entity.getClass().equals(clazz);

Если это не работает для вас, приведите несколько примеров того, как это не получается, поскольку это должно быть просто!

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