私は、具体的JPAクエリー、oneToManyまたはmanyToOneは両方とも機能するはずですか?
のOpenJPA 2.1.0-SNAPSHOTversion IDに、より最新のものに古いOpenJPAの実装からいくつかのコードを移植しています: のOpenJPA-2.1.0-SNAPSHOT-r422266:990238
私の以前の動作中のクエリはこの新しい環境で失敗しましたが(正確なエラーの詳細は後で説明します)、クエリの再作成はうまくいきました。違いは、私が最初から始まる一対多問合せのどちらの側にあるかです。私の質問は2つの部分に分かれています:
- このようなクエリを開始する「正しい」側はありますか?両方のクエリがうまくいくと思いますか?
- 私たち両方がうまくいくと思うなら、私が見ている失敗を説明できますか?
簡潔にするため、ここのクラスはむしろ削減されています。関係の片側:
@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>
エラーをしている1私は
です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をデータベースとして使用しています。
私はあなたが正しいと思うが、決定的に知ることは良いことだ。 – djna