论坛首页 Java版 Hibernate

JPwH中的select-to-determine-state-unless-versioned中文表述何为佳?

浏览 402 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
最后更新时间:2007-11-14 关键字: JPA
Java Persistence with Hibernate P325倒数第5行中的select-to-determine-state-unless-versioned中文表述何为佳?

Mapping natural primary keys with JPA annotations is straightforward:
@Id
private String username;
If no identifier generator is declared, Hibernate assumes that it has to apply the
regular select-to-determine-state-unless-versioned strategy and expects the application
to take care of the primary key value assignment. You can again avoid the
SELECT by extending your application with an interceptor or by adding a versioncontrol
property (version number or timestamp).
Composite natural keys extend on the same ideas.

用JPA注解映射自然主键很简单:
@Id
private String username;
如果没有声明标识符生成器,Hibernate就会假设它必须应用一般的select-to-determine-state-unless-versioned策略,并期待应用负责分配主键值。你可以通过扩展包含拦截器的应用或者添加版本控制属性(版本号或者时间戳),再次避免SELECT。
复合的自然键按同样的思路进行扩展。
   
最后更新时间:2007-11-14
5.1.4.5. 程序分配的标识符(Assigned Identifiers)
如果你需要应用程序分配一个标示符(而非Hibernate来生成),你可以使用assigned 生成器。这种特殊的生成器会使用已经分配给对象的标识符属性的标识符值。 这个生成器使用一个自然键(natural key,有商业意义的列-译注)作为主键,而不是使用一个代理键( surrogate key,没有商业意义的列-译注)。这是没有指定<generator>元素时的默认行为

当选择assigned生成器时,除非有一个version或timestamp属性,或者你定义了 Interceptor.isUnsaved(),否则需要让Hiberante使用 unsaved-value="undefined",强制Hibernatet查询数据库来确定一个实例是瞬时的(transient) 还是脱管的(detached)。
   
0 请登录后投票
论坛首页 Java版 Hibernate

跳转论坛:
JavaEye推荐