【发布时间】: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。