【问题标题】:Is there an implicit version field in JPA?JPA 中是否有隐式版本字段?
【发布时间】:2012-12-03 23:36:38
【问题描述】:

我是 JPA 的新手,注意到可以通过使用 @Version 注释实体中的字段来使用乐观锁定。我只是好奇持久性提供程序是否会创建一个隐式版本字段,如果以前不存在的话。比如objectdb的网站说:

“使用 ObjectDB 时,乐观锁定默认启用且全自动。”

但这似乎是特定于供应商的行为,因为例如在 EclipseLink 中默认情况下不会启用乐观锁定。所以如果我想使用锁定(是的,我想要:-)),我是否需要为我的所有实体创建一个额外的属性?规范中有提示吗?

提前谢谢你!

【问题讨论】:

    标签: jpa eclipselink objectdb


    【解决方案1】:

    是的,JPA @Version 注解允许你定义一个版本属性,我假设 ObjectDB 默认只创建一个这个属性。

    您自己的属性可以是 Integer、Long 或 Short(或它们的原始等价物)或 java.sql.Timestamp。

    据我所知,大多数 JPA 提供程序仅在您明确使用 @Version 注释时才执行乐​​观锁定。

    【讨论】:

    • 好吧,我担心这一点。我真正想要实现的是将所有实体锁定在任意查询中,但不假设实体模型的状态,也不知道实际的持久性提供者。
    • 乐观锁定实际上并没有“锁定”记录,如果您想要真正的锁定,则需要查看悲观锁定。
    • 如果你想要可移植性,我认为在 long 类型的属性上使用 @Version 是安全的。
    • 我明白,但假设我不知道实体模型,但我想设置锁(更多的是在库的上下文中而不是我自己的应用程序)
    • 然后你可以使用悲观锁定(通过EntityManager显式锁定记录)。
    猜你喜欢
    • 1970-01-01
    • 2013-04-17
    • 2015-01-21
    • 1970-01-01
    • 1970-01-01
    • 2011-12-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多