【发布时间】:2013-08-14 00:55:41
【问题描述】:
我正在使用普通 JDBC 编写一些 DAO。
目前我有一个添加方法,可以将实体数据保存到记录中。现在,我需要考虑记录已经存在的情况。我猜在现成的 ORM 中有一个持久化方法:
- 要么检查记录是否已经存在。在这种情况下,PK 上的 SELECT 会比 find 更有效?
- 或者在主键冲突等情况下引发异常。
- 两者都有?
这通常是怎么做的?
【问题讨论】:
我正在使用普通 JDBC 编写一些 DAO。
目前我有一个添加方法,可以将实体数据保存到记录中。现在,我需要考虑记录已经存在的情况。我猜在现成的 ORM 中有一个持久化方法:
这通常是怎么做的?
【问题讨论】:
在像 Hibernate 这样的典型 ORM 中,如果您尝试插入一个与持久实体具有相同标识符的瞬态实体,您将得到一个 Constraint Violation 异常。
我建议您开始交易,搜索/查找具有相同标识符的实体。如果存在,请告诉您的应用程序存在问题,可能是自定义异常和回滚。如果不存在,则继续插入实体并提交事务。
这一切都取决于什么构成了一个平等的实体,即。 PK、一些唯一字段等。通常,在 ORM 中,您将能够为实体标识符定义生成策略。
【讨论】: