Hibernate envers, сообщение -удаление события вызывает исключение нарушения ограничения

Project использует Hibernate 3.5, Spring Webflow 2 и Hibernate Envers для аудита. Envers настраивается в файле hibernate.cfg.xml. У меня есть от одного -до -много сопоставлений отношений между объектами «ArticleGroup» и «Article». Таблица «статьи» имеет внешний ключ «статья _группа _id» ссылается на идентификатор в таблице «статья _группы». В конце -, когда я удаляю статью, Hibernate Envers выдает исключение нарушения ограничения для события удаления сообщения -. Если я не использую Envers, операции удаления работают нормально. Два объекта определяются следующим образом

    @Entity
    @Table(name="article_groups")
    @Audited
    public class ArticleGroup implements Serializable {

        @OneToMany(mappedBy="articleGroup", fetch = FetchType.EAGER, cascade = CascadeType.ALL)
        @OrderBy("id")
        private List<Article> articles;

        // other fields, getters and setters
    }

    @Entity 
    @Table(name="articles")
    @Audited
    public class Article implements Serializable {

        @ManyToOne
        @JoinColumn(name = "article_group_id")
        private ArticleGroup articleGroup;

        // other fields, getters, setters
    }

Удаление статьи кодируется следующим образом:

    @Service("articleManager")
    public class ArticleManagerImpl implements ArticleManager {
            // inject dao
            @SuppressWarnings("unchecked")
            @Transactional(readOnly = false, propagation = Propagation.REQUIRES_NEW)
            public void deleteArticle(Article article, Object articles) {
            articleDao.delete(article);
            ((List<Article>)  ((OneSelectionTrackingListDataModel)articles).getWrappedData()).remove(article);
        }
    }

Исключение нарушения ограничения:

Hibernate: delete from live.articles where id=?
Hibernate: select nextval ('hibernate_sequence')
Hibernate: insert into audit.REVINFO (REVTSTMP, REV) values (?, ?)
Hibernate: insert into audit.articles_AUD (REVTYPE, content, language, name, order_number, title, article_group_id, id, REV) values (?, ?, ?, ?, ?, ?, ?, ?, ?)
82828 [http-bio-8080-exec-2] DEBUG   org.springframework.orm.hibernate3.HibernateTransactionManager  - Initiating transaction rollback after commit exception
org.springframework.dao.DataIntegrityViolationException: Could not execute JDBC batch update; nested exception is org.hibernate.exception.ConstraintViolationException: Could not execute JDBC batch update
...
Caused by: java.sql.BatchUpdateException: Batch entry 0 insert into audit.articles_AUD (REVTYPE, content, language, name, order_number, title, article_group_id, id, REV) values ('2', NULL, NULL, NULL, NULL, NULL, NULL, '14', '17') was aborted.  Call getNextException to see the cause.
at org.postgresql.jdbc2.AbstractJdbc2Statement$BatchResultHandler.handleError(AbstractJdbc2Statement.java:2619)

Как видите, когда Энверс вставляет в таблицу 'audit.articles _AUD',идентификатор группы _статьи _равен нулю, что вызвало нарушение ограничения. Кто-нибудь знает, как это исправить? Большое тебе спасибо.

6
задан Raistlin 14 August 2012 в 14:10
поделиться