【发布时间】:2011-10-01 11:36:58
【问题描述】:
我使用找到的代码here 来支持Seam EntityQuery 的Ajax 有序/分页。代码本身运行良好,我可以通过各种参数毫无问题地对数据进行排序。实体本身不是 SQL 表,而是映射到 JPA(Hibernate)实体的 SQL 视图。只要我坚持 SELECT 语句并且不尝试执行 INSERT 或 UPDATE,这似乎也可以正常工作。我的后端数据库是 PostgreSQL 8.4,我还没有实现任何条件触发器来支持 VIEW 更新。
当我使用 EntityQuery.next() 或 EntityQuery.previous() 方法从一页结果转到另一页时,我的问题必须解决。似乎整个页面请求都包含在事务中,当我单击下一步按钮时,它会尝试对我的实体对象执行更新。我已经在我的 EntityQuery 中覆盖了 next() 方法,并且该操作成功完成。但是,在它完成之后和视图呈现之前,会立即发生尝试的 UPDATE。由于我的 Entity 对象无法在后端 DB 上更新(因为它是一个 VIEW),所以我抛出了一个异常。
在使用这个 EntityQuery 时,有什么方法可以防止事务被打开?我尝试使用@ReadOnly 注释我的实体对象。那没有用。我尝试将@Transactional(NEVER) 添加到我的EntityQuery。那没有用。还有其他想法吗?
【问题讨论】:
标签: exception jpa view transactions seam