当前位置: 首页 > 面试题库 >

手动更新hibernate版本

吕德惠
2023-03-14
问题内容

我有两个类,例如,使用Hibernate(3.6.1最终版)和JPA(2.0)将Foo和Bar映射为@OneToOne(双向),例如-

@Entity
public class Foo{
    @Id
    private Long id;

    @OneToOne(cascade = CascadeType.ALL, mappedBy = "foo")
    private Bar bar;

    @OneToOne(cascade = CascadeType.ALL, mappedBy = "foo")
    private Qux qux;

    @Version
    private int version;

    // getters and setters omitted
}

@Entity
public class Bar{
    @Id
    private Long id;

    @OneToOne
        @JoinColumn(name = "foo_id",  nullable = false)
    private Foo foo;

    // getters and setters omitted
}

@Entity
public class Qux {
    @Id
    private Long id;

    @OneToOne
        @JoinColumn(name = "foo_id",  nullable = false)
    private Foo foo;

    // getters and setters omitted
}

请注意-Bar和Qux没有@Version

如果我们更新Bar,则hibernate将不会增加Foo的版本,而Qux则不会相同。但是我们的业务逻辑需要-
如果有人在Foo中更新Bar,而其他线程正在尝试更新同一Foo的Qux,但没有更新Bar,反之亦然,则此类更新将失败。
由于如果我们更新Bar,hibernate不会更新Foo的version属性,因此,如果我们更新Bar和Qux,我们决定手动更新Foo的版本(我知道这很奇怪,不建议这样做)。
它工作得很好..但是我担心并发中的一些极端情况可能会失败或出现意外行为。
为此目的对版本进行这种调整是否安全?还是有其他更好的选择(我是


问题答案:

强制版本更新的正确方法如下:

em.lock(entity, LockModeType.OPTIMISTIC_FORCE_INCREMENT);

它打算在这种情况下使用。

其他的方法EntityManager是采取LockModeType可被使用。



 类似资料:
  • 为了能使用whistle的所有功能,请记得将whistle升级到最新版本,版本变更点请查看:CHANGELOG 执行命令更新whistle(Mac或Linux用户,如果安装过程出现异常,请在命令行前面加sudo,如: sudo npm install -g whistle): # 以下命令都可以更新whistle $ npm install -g whistle # or $ npm instal

  • 问题内容: 在做一个小发布并将其标记之前,我想更新package.json以反映该程序的新版本。 有没有一种方法可以自动编辑文件? 需要帮助吗? 问题答案: 可能是正确的答案。只给一个替代我建议咕噜凸点。它由angular.js的一名成员维护。 用法: 如果仍然使用grunt,那可能是最简单的解决方案。

  • 问题内容: 不久,我将一个实体映射为在启用了二级缓存(只读策略)的数据库(Oracle)中查看-ehcache。 如果我手动更新数据库中的某些列,则不会更新缓存。 我没有找到任何方法可以做到这一点。仅当更新将通过Hibernate实体完成时。 我可以以某种方式实现此功能吗? 也许乔布监视表(或视图)?或者也许有某种方法可以通知Hibernate有关具体表中数据库的更改。 感谢您将来的回答! 问题答

  • v2.0.9[2020-4-12] 修复(Fixed): 修复 MySQL 8.0 生成实体主键位置错误 e437d36 更新(Update): 连接池关闭连接, 如果连接已经断开, 异常将会被忽略 7aac80da 增强(Enhancement): v2.0.8[2020-1-18] 修复(Fixed): 修复 ws server 的 message response.finish 兼容 swo

  • 网防G01最新版本为:Linux版本:3.0.63.10,Windows版本:3.1.18.6,PC客户端版本:3.1.18。 更新记录: 2020年03月30日 2018年11月06日 2018年05月15日 2017年10月10日 2017年07月21日 2020年3月30日,更新说明 Linux版本:3.1.20.15 Windows版本:3.1.20.15 PC客户端版本:3.1.20.1

  • 2018-06-19:更新 Homestead 版本到 v7.8.0; 2018-06-17:更新 Homestead 等虚拟机软件到最新;