Hibernate метод, чтобы возвращать только записи, где значение в указанном столбце изменилось - PullRequest
0 голосов
/ 01 февраля 2012

Таблица: Profile

pk   fk fname lname  dob         ssn        createDate  ModifyDate
1    22 bob   smith  01/02/1978  123456789  01/27/2012  null
2    22 bob   smith  01/02/1978  987654321  01/27/2012  01/28/2012
3    22 bob   smith  04/02/1944  123456789  01/27/2012  01/29/2012
4    22 bob   dole   04/02/1944  123456789  01/27/2012  01/30/2012
5    22 bob   dole   02/12/1913  123456789  01/27/2012  01/31/2012
6    22 john  dole   02/12/1913  123456789  01/27/2012  02/02/2012
7    22 bob   dole   11/22/1994  123456789  01/27/2012  02/03/2012

Я хотел бы вернуть последние три раза, когда dob был изменен на fk = 22.

Так что вернется запись 7, 6, 4.

Так что я могу сделать что-то вроде этого:

Integer foreignKey = new Integer(22);
Criteria criteria = session.createCriteria(Profile.class);
List results = criteria.add(Restrictions.eq("fk",foreignKey))
  .addOrder( Order.desc("ModifyDate") ).list();

Теперь я знаю, что могу написать цикл for и сравнить dob, чтобы увидеть, какие даты изменились.

Но есть ли способ гибернации или более простой способ сделать это?

Как насчет того, чтобы узнать, изменились ли и dob, и fname?

Спасибовы.

1 Ответ

0 голосов
/ 01 февраля 2012

Возможно, вы захотите взглянуть на Hibernate Envers , но я не думаю, что вы можете автоматизировать такого рода запросы с его помощью. Afaik у вас есть только две возможности для достижения этой цели:

  1. Создайте соответствующий запрос (Критерии, HQL, SQL), чтобы получить соответствующие записи или загрузить всю историю и идентифицировать записи в вашем коде Java.
  2. Расширьте свою таблицу истории и триггер (или прослушиватель событий гибернации), чтобы включить имена измененных свойств / столбцов. Может быть, с дополнительным логическим столбцом для свойства / столбца. Таким образом, вы можете запросить соответствующие записи достаточно эффективно.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...