我们正在努力增加Web应用程序的数据库兼容性范围。我们的应用程序是带有JSP,Servlet和EJB的Java EE。我们试图使我们的应用程序兼容的数据库是SQL Server 2008。
我们遇到的问题发生在我们的应用程序中,当用户尝试在特定屏幕上附加多个文件并使用多个上传界面时。用户可以正确地成功附加第一个文件和数据库更新。当用户在添加第二个附件后尝试更新时,将抛出唯一键约束违例[无法插入重复值]错误。以下是输出的错误:
Violation of UNIQUE KEY constraint 'UQ__Key__8861A9F23EDC53F0'. Cannot insert duplicate key in object 'dbo.Entity'.
org.hibernate.exception.ConstraintViolationException: could not insert: [foo.beans.eproc.entity.Entity]
到目前为止,我们已尝试以下方法来解决此问题:
不幸的是,上面的[1]并没有解决问题,因为仍然会抛出UQ Key违规。对于上面的[2],我们无法验证Hiberante是否在DELETES之前执行INSERTS。
以下问题的答案将有助于我们取得一些进展:
答案 0 :(得分:1)
1)它可能是一个解决方案,但是,如果您需要该约束来确保唯一值,那么您将失去它。此外,对于它的价值,查询优化器使用了唯一约束来使查询运行得更快,因此丢失可能会损害性能和数据完整性。
2)有nhibernate监控工具,但也有TSQL监控工具。如果您正在使用SQL SErver 2008或更好地运行扩展事件会话并捕获通过rpc complete和sql批处理完成事件调用的查询。 SQL Server 2005&早些时候,您可以通过Profiler设置服务器端跟踪。
3)不熟悉Hibernate在这里发表评论,抱歉。