使用Kundera JPA进行乐观锁定

时间:2016-05-25 12:03:39

标签: jpa cassandra kundera

我正在尝试将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();

回滚不起作用?

第二个问题

如何在persist上执行乐观锁定(又名CAS)? 在cassandra我可以跑:

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

使用Kundera时,我希望只有在基础商店中的其他人没有更改实体时才持久保存实体。我能这样做吗?

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

1 个答案:

答案 0 :(得分:0)

  • 回滚在本机查询的情况下不起作用,因为在持久化上下文中没有映射到查询的实体对象(维护事务中对象状态所需)。

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