Я портирую некоторый код из старой реализации OpenJPA на более новую, в частности
OpenJPA 2.1.0-SNAPSHOTversion 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 в качестве базы данных.