我正在使用找到的代码here来获取Seam EntityQuery的Ajax有序/分页支持。代码本身运行良好,我能够通过各种参数对数据进行排序。实体本身不是SQL表,而是映射到JPA(Hibernate)实体的SQL视图。这也似乎没有问题,只要我坚持使用SELECT语句而不尝试执行INSERT或UPDATE。我的后端数据库是PostgreSQL 8.4,我还没有实现任何条件TRIGGER来支持VIEW更新。
当我使用EntityQuery.next()或EntityQuery.previous()方法从一页结果转到另一页时,我的问题必须要做。看来整个页面请求都包含在一个事务中,当我单击我的下一个按钮时,它会尝试对我的Entity对象执行UPDATE。我已经覆盖了我的EntityQuery中的next()方法,并且该操作成功完成。但是,在它完成之后立即在视图呈现之前,会发生尝试更新。由于我的Entity对象无法在后端DB上更新(因为它是一个VIEW),我会抛出异常。
使用此EntityQuery时是否有任何方法可以阻止事务被打开?我试过用@ReadOnly注释我的Entity对象。那没用。我尝试将@Transactional(NEVER)添加到我的EntityQuery中。那没用。还有其他想法吗?
答案 0 :(得分:0)
尝试更改组件的会话范围。这样,seam将从内存加载对象而不是命中数据库。
@Scope(ScopeType.SESSION)