【发布时间】:2011-05-28 10:47:31
【问题描述】:
在在应用程序级别具有唯一键约束的表上处理数据插入/更新的最佳做法是什么?这些是我想出的:
1。在插入数据之前对表运行一个查询,看看它是否会违反约束。
优点
- 您拥有完全控制权,因此您不必处理任何特定于 DBMS 的错误消息。
- 额外的数据完整性检查层
缺点
- 可能会影响性能,因为大多数情况下不会违反约束。
- 您需要在运行重复数据查询时锁定表。
2。没做什么。更新表格,看看有什么问题。
优点
- 简单!
- 总体速度更快,因为您不必在每次更新表时都运行额外的查询。
缺点
- 您的验证例程取决于数据库层。
- 如果数据不粘,则必须通过堆栈跟踪查找原因。
哪一个是更广泛接受的解决方案?这些有替代品吗?
我正在使用 Java、JPA、Hibernate 和 Spring BTW。欢迎任何建议,甚至是针对特定框架的建议!
谢谢!
【问题讨论】:
-
我很可能错了,但我认为 hibernate 的实体管理器会为你解决这个问题?
-
Hibernate 会将来自 DBMS 的任何错误都包含在异常中。我认为 Hibernate 属于数据库/持久层而不是应用层。
-
第二个优于第一个的另一个优点是第一个解决方案必须以原子方式执行检查和插入以保持正确,而第二个则不然。
标签: java design-patterns database-design application-design