每当我调用一个查询(只是你可以看到一个选择)时,我的版本列会增加一个。有谁知道这可能是怎么回事?
我已经尽可能简单地模拟了查询(以及我现在正在测试它的方式)。
查询:
String queryString = "SELECT pr FROM PaymentRequest pr where pr.status = 'PO_ERROR'";
TypedQuery<PaymentRequest> query = em.createQuery(queryString, PaymentRequest.class);
return query.getResultList();
此方法在新事务中执行(TransactionAttributeType.REQUIRES_NEW)
JPA版本:2.0
答案 0 :(得分:1)
发现问题。我的实体有@Embeddable属性。实体/ embeddable通过gui中的JSF setter进行更新(应用请求值阶段)。我在嵌入式对象/属性本身上获得了javax.el.PropertyNotFoundException。当嵌入对象的所有属性都为null时,嵌入对象本身在entitymanager(hibernate jpa 2)加载对象后为null时就是这种情况。
要修复PropertyNotFoundException,我在我的实体上添加了@PostLoad方法,以便在embeddable为null时执行新的MyEmbbedableObject()。这导致Hibernate将embeddable标记为脏,从而导致更新,这当然导致版本列在提交执行查询的事务时增加。我删除了PostLoad来实例化null embeddables。这解决了查询期间“版本”增加的问题。 当然现在通过gui更新实体/ embeddable再次被打破: - )
答案 1 :(得分:0)
如果使用EclipseLink,则可以将eclipselink.read-only设置为检索结果并避免增加版本:
query.setHint(QueryHints.READ_ONLY, HintValues.TRUE);