项目使用 Hibernate 3.5、Spring Webflow 2 和 Hibernate Envers 进行审计。Envers 配置为Hibernate.cfg.xml。我在实体“文章组”和“文章”之间有一对多的关系映射。表“文章”具有外键“article_group_id”引用表“article_groups”中的 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)
如您所见,当Enver插入表audit.articles_AUD时,article_group_id为空,这导致了约束冲突。有人知道如何修复它吗?非常感谢。
如果您正在进行后期删除,并且articles_AUD
对文章
或您在此操作期间删除的任何其他条目有任何约束,那么您将尝试使用不再存在的引用将条目添加到
中。
根据经验,我们将参考资料保留在审计表之外,以便更好地保存修订历史。如果审核表包含对非审核表的约束,则如果删除审核表中的任何条目,则修订历史记录可能会中断。
在设置org.hhibernate.envers.store_data_at_delete
时参考您的解决方案。
删除实体时,实体数据是否应存储在修订中(而不是仅将id和所有其他属性存储为空)。这通常是不需要的,因为数据存在于倒数第二个版本中。然而,有时在最后一次修订中访问它会更容易和更有效(然后实体在删除前包含的数据被存储两次)。
这告诉我,在您的审计表中有< code>NOT NULL的列,因此违反了约束,因为Envers试图插入< code>null。您可能希望在审计表中允许null。
明白了。在配置文件中设置此属性:
<prop key="org.hibernate.envers.store_data_at_delete">true</prop>
参考:http://docs.jboss.org/hibernate/envers/3.6/reference/en-US/html/configuration.html表3.1.环境配置属性org.hhibernate.Envers.store_data_at_delete
我的数据库中有两个表:一个用于持久化用户,另一个用于保存他们的权限。 问题是,当我尝试删除用户时,必须删除权限,这样我就可以避免收到违反约束的异常。我使用JPAcascadeType.ALL和孤儿删除=true: 问题是,只有在将要删除的用户是在另一个会话中创建的情况下,hibernate才会生成对权限的删除查询:当我创建用户时,添加一些权限,然后尝试删除它,会引发违反限制的例外情况,而在另一会话
问题内容: 我在使用JPA / Hibernate(3.5.3)设置时遇到麻烦,在这里我有一个实体,即“ Account”类,该类具有子实体列表,“ Contact”实例。我试图能够将Contact的实例添加/删除到Account的List 属性中。 将新实例添加到集合中并调用saveOrUpdate(account)可以保留所有可爱的东西。如果我然后选择从列表中删除该联系人并再次调用saveOr
我正在使用Microsoft Visual C#2010 Express编写一个窗口窗体应用程序。我在写一个数独程序。我以前写过一次这个程序,并让它工作。由于硬盘故障,我丢失了源代码。我在表格上画了一个网格。我让鼠标事件工作了。我有重要的新闻活动要办。然后我在表单中添加了几个按钮,并让它们工作。但随后出现了一个问题。在我添加按钮并使其工作后,按键事件停止工作。为什么按钮事件和按键事件之间会发生冲突
我有一个带有唯一约束的字段'nom'的表,当我测试插入表中已经存在的该字段的值时,会抛出org.hibernate.exception.ConstraintViolationExcure。然后在我坚持之后,我得到了一个事务已经活动的异常。 这是我在Dao类中的持久化方法 这里是我捕获异常的代码 如何解决此事务问题?
我正在使用ListSelectionListener从所选行更新我的JTextField(countryTxt)。 但是,当我选择一行并单击按钮时,它会弹出一个异常。当我没有在表格中选择一行并单击按钮时,一切正常。显然,我可以在未触发事件时删除一行。因此,我的问题是:如何在触发事件后删除一行。提前谢谢。
我正在尝试使用Hibernate保存数据。一切都发生在同一会话中。逻辑如下: 1)开始交易并尝试保存: 2) 如果新记录违反完整性约束,请在外包装方法中捕获异常,打开另一个事务并查询更多数据 问题是当第二个事务执行时query.list它会抛出一个应该与前一个事务链接的异常。 SQLIntegrityConstraintViolationException:ORA-00001:唯一约束 我应该从另