我想从行数据库中删除特定的记录。但是,当我尝试执行此查询:卡桑德拉昆德拉 - 删除记录按行键
Query query = em.createQuery(
"DELETE FROM User u WHERE u.userId = :u");
query.setParameter("u", userID).executeUpdate();
我得到这个异常:“条件=不支载对行键查询!”。
有没有什么解决方法,或者我错过了什么?
我想从行数据库中删除特定的记录。但是,当我尝试执行此查询:卡桑德拉昆德拉 - 删除记录按行键
Query query = em.createQuery(
"DELETE FROM User u WHERE u.userId = :u");
query.setParameter("u", userID).executeUpdate();
我得到这个异常:“条件=不支载对行键查询!”。
有没有什么解决方法,或者我错过了什么?
你可以做一个变通方法是什么:
查找使用: 用户u = em.find(User.class,用户id)
然后, em.delete(U);
另外, http://groups.google.com/group/kundera-discuss/subscribe 可以给你快速和更好的支持,讨论昆德拉周围的问题。
-Vivek
以执行一种可能的方法,例如删除(在使用昆德拉,版本2.2此刻一个命令)时使用“原生查询”,例如:
EntityManagerFactory emf = Persistence.createEntityManagerFactory("cassandra_pu");
EntityManager em = emf.createEntityManager();
// "table" is the table name (case sensitive) you name your table in Cassandra
String query = "delete from table where key = 'keyValue'";
// "TablePersistencyEntity" is the Kundera Persistency Entity (Class) for the "table"
Query q = em.createNativeQuery(query, TablePersistencyEntity.class);
q.getResultList();
em.close();
止跌”导致数据库读取:(...在PlayOrm中为cassandra和JPA,而是用户user = em.getReference(User.clas,userId)和em.remove(user);所以你不需要额外的数据库读取 – 2012-10-28 15:56:10
em.getReference(User.clas,userId) 如何获得对实际记录的引用而不需要访问数据库甚至填充到cac中他你需要它。 无论如何,其他方式是通过执行CQL查询。同样在2.1以后,这样的查询应该可以工作。 -Vivek – 2012-10-29 02:35:02
你可以看看hibernate的代码或PlayOrm的,但基本上getReference只是在没有触摸db的情况下包装Id,然后删除解包并发送删除id等于该id的行,所以不需要从数据库读取。有时候没有必要把它放在缓存中,所以我不确定你为什么引用缓存。 – 2012-10-29 11:06:18