我移植從舊OpenJPA實現以更近的一個部分代碼,專門JPA查詢,oneToMany或manyToOne,都應該工作?
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
我在使用DB2作爲數據庫的Windows上的WebSphere 8.0上運行。
我認爲你是對的,但最好明確地知道。 – djna 2011-02-11 23:45:30