我正在将一些代码从一个旧的OpenJPA实现移植到最近的一个,特别是
OpenJPA 2.1.0-SNAPSHOTversion id: openjpa-2.1.0-快照-r422266:990238
我以前工作过的查询在这个新环境中失败了(稍后准确失败的详细信息),但是重定向查询工作得很好。不同之处在于我开始的一对多查询的哪一边。我的问题分两部分:
为了简洁起见,这里的类是相当少的。关系的一方:
@Entity
@Table(name="CWS_MDS")
public class CwsMd implements Serializable {
@Id
Column(name="RSM_ID", unique=true, nullable=false, length=128)
private String rsmId;
// ... many elisions ...
//bi-directional many-to-one association to CwsPubOperationRef
@OneToMany(mappedBy="cwsMd")
private Set<CwsPubOperationRef> cwsPubOperationRefs;
}另一边
@Entity
@Table(name="CWS_PUB_OPERATION_REF")
public class CwsPubOperationRef implements Serializable {
@EmbeddedId
private CwsPubOperationRefPK id;
//bi-directional many-to-one association to CwsMd
@ManyToOne
@JoinColumn(name="RSM_ID", nullable=false, insertable=false, updatable=false)
private CwsMd cwsMd;
// ... more elisions ...
}工作的查询:
<named-query name="good"> <query>
SELECT opref FROM CwsPubOperationRef opref
JOIN opref.cwsMd rsm
WHERE rsm.rsmId = :rsmId
</query>
</named-query>那个没有
<named-query name="bad"> <query>
SELECT opref FROM CwsMd rsm
JOIN rsm.cwsPubOperationRefs opref
WHERE rsm.rsmId = :rsmId
</query> </named-query>我得到的错误是
org.apache.openjpa.persistence.PersistenceException: [jcc][t4][10120][10898][3.57.82]
Invalid operation: result set is closed. ERRORCODE=-4470, SQLSTATE=null我在WebSphere 8.0上运行,在Windows上使用DB2作为数据库。
发布于 2013-08-08 17:46:48
第二个查询不正确,因为标识变量opref指集合(rsm.cwsPubOperationRefs是集合),而不是单个值。
在JPA2.0规范中,这是用以下几个词描述的:
在查询的FROM子句之外使用collection_valued_path_expression是非法的,但empty_collection_comparison_expression、collection_member_expression或SIZE运算符的参数除外。
第一个查询非常好-- CwsPubOperationRef,因为标识变量指的是单个值。
发布于 2011-02-11 01:07:20
在这个特定的版本中,您可能遇到了一些错误。当我试图设置OpenJPA fetchSize时,我也得到了结果集是封闭错误。在我的例子中,<>结果是OpenJPA query.getResultList()返回一个代理对象,而不是实际的列表。因此,如果在将结果列表返回给客户端之前耗尽了结果列表,那么我就不再遇到问题了。然而,我们还有另一个问题。只要设置fetchBatchSize,OpenJPA就会产生一个无效的查询!当然是个窃听器。
https://stackoverflow.com/questions/4853023
复制相似问题