【发布时间】:2011-06-18 16:33:45
【问题描述】:
我正在将一些代码从旧的 OpenJPA 实现移植到更新的实现,特别是
OpenJPA 2.1.0-SNAPSHOT 版本 ID: openjpa-2.1.0-SNAPSHOT-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 作为数据库。
【问题讨论】: