Я в настоящее время работаю с, в спящем режиме Envers.
Как удалить записи в контрольной таблице, связанной с объектом, который я хочу удалить? Мой объект не имеет никакого отношения с другими объектами.
Я выяснил, что должен выполнить в этом onPostDelete
метод моего пользовательского слушателя:
import org.hibernate.envers.event.AuditEventListener;
import org.hibernate.event.PostCollectionRecreateEvent;
import org.hibernate.event.PostDeleteEvent;
import org.hibernate.event.PostInsertEvent;
import org.hibernate.event.PostUpdateEvent;
import org.hibernate.event.PreCollectionRemoveEvent;
import org.hibernate.event.PreCollectionUpdateEvent;
public class MyListener extends AuditEventListener {
...
@Override
public void onPostDelete(PostDeleteEvent arg0) {
// TODO Auto-generated method stub
super.onPostDelete(arg0);
}
...
}
Я прочитал документацию, форумы, много вещей, но я не могу понять это. Возможно, это не возможно, я не знаю.
Кто-то когда-либо делал это прежде?
Хорошо, я на 50% справился с этим для тех, кто хочет знать.
Благодаря создателю Hibernate Envers, Адаму Варски, я цитирую:
«id» - это ключевое слово гибернации для идентификатора объекта, независимо от его имени; в В случае объектов аудита идентификатор составной и называется "originalId". Попробуйте:
"delete from full.package.name.User_AUD u where u.originalId.id = :userid"
Но теперь я также хотел бы удалить записи, относящиеся к таблице аудита, в моей таблице revinfo.
Если у кого-то есть ключ к разгадке, дайте мне знать.
Записи аудита обычно только добавляются, а не удаляются, даже когда удаляется связанный объект, поэтому я не думаю , что Envers API поддерживает это.
Теперь, если вы действительно хотите удалить записи для удаленных объектов (это своего рода поражение цели аудита), вы можете немного отложить это и вместо удаления записей во время удаления запускать ежедневный собственный запрос, например, каждый ночь.