【问题标题】:Optimistic locking with Kundera JPA使用 Kundera JPA 进行乐观锁定
【发布时间】:2016-09-23 00:33:28
【问题描述】:

我正在尝试使用 Kundera 作为 cassandra 上的 JPA 实现(即用于事务管理功能)。

2 个问题:

第一个问题

事务管理真的不支持原生查询吗?即如果我这样做:

EntityManagerFactory emf = Persistence.createEntityManagerFactory("piccandra", getCassandraProperties());

EntityManager em = emf.createEntityManager();
em.setFlushMode(FlushModeType.COMMIT); 
em.getTransaction().begin();
Query q = em.createNativeQuery("insert into photographer (photographer_id, photographer_name) values ('id1', 'name1')");
q.executeUpdate();
em.getTransaction().rollback();

回滚不起作用?

第二个问题

如何在持久化上执行乐观锁定(又名 CAS)? 在 cassandra 中我可以运行:

UPDATE photographer SET name = 'x' WHERE id = 1 AND update_date <= some-timestamp

在使用 Kundera 时,我只想保留一个实体,前提是它没有被基础商店中的其他人更改。我可以这样做吗?

编辑: 我看到 JPA 确实支持乐观锁定,但 Kundera 没有实现它。

【问题讨论】:

  • 如果您想要乐观处理,为什么要使用 NATIVE 查询?没有意义。乐观处理是在使用持久化 API 时
  • 如果我可以使用本机查询,我可以使用问题中的语句来处理锁定。实际上,由于这些限制,我实际上不喜欢使用持久性 API。

标签: jpa cassandra kundera


【解决方案1】:
  • 回滚在本机查询的情况下不起作用,因为在持久性上下文中没有映射到查询的实体对象可用(在事务中维护对象状态所必需的)。

    李>
  • Kundera 目前不支持乐观锁定。如果您正在寻找解决方法,您可以在 Cassandra 上使用本机查询。

【讨论】:

    猜你喜欢
    • 2021-09-27
    • 2015-06-10
    • 1970-01-01
    • 2012-11-14
    • 1970-01-01
    • 2019-12-30
    • 2011-05-31
    • 1970-01-01
    • 2014-07-02
    相关资源
    最近更新 更多