1

我有一个使用代理主键的表。实体(表)的自然键是命名空间+名称。访问该表的 Web 应用程序将为用户提供一个 Web 表单,该表单允许用户更新实体的任何属性。我正在为 ORM 使用 Hibernate。发出 session.update(entity) 时,实体需要填充其 ID(代理键)以允许 Hibernate 识别数据库中的记录。我可以想到 2 种方法

(1)将 ID(隐藏)传递到前端,然后在更新表单时返回业务层

(2)仅传递自然键并使用自然键进行查找在DAO层获取ID。

请注意,无法使用表单更新自然键。有一种单独的形式用于更改对象的身份(命名空间 + 名称),并发性不是问题,即没有人能够更改身份,而其他人持有更新锁,因此使用自然键查找会仍然产生请求更新时使用的相同记录。

问题
(1)除了我提到的方法之外,还有其他方法吗?
(2) 这通常在 Web 应用程序中是如何完成的?

我尝试搜索,但找不到太多关于此的信息;可能没有正确选择单词进行搜索。

4

1 回答 1

1

这两种方法都是有效的,我什至不知道该说些什么。如何实现这取决于您,但如果您使用代理键并激活二级缓存,则可能会直接从缓存中获取实体,如果经常使用这些操作,这将提高性能。通过自然键搜索将绕过缓存。

于 2012-09-15T13:39:52.200 回答