A JPA request, oneToMany or manyToOne, should work?

I am moving some code from the old version of OpenJPA to a newer one, in particular to

OpenJPA 2.1.0-SNAPSHOTversion id: OpenJPA-2.1.0-SNAPSHOT-r422266: 990238

My previous working request failed in this new environment (details that a crash later occurred), but reworked the request, which worked fine. The difference is on which side of the one-to-many query I start. My question has two parts:

  • Is there a “right” side with which to start such a request? Do we expect both requests to work?
  • If we expect both to work, can we explain the failure that I see.

For brevity, the classes are pretty shortened here. One side of the relationship:

@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;

}

other side

   @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 ...
    }

A query that works:

 <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 .

+3
2

, opref (rsm.cwsPubOperationRefs is collection), .

JPA 2.0 :

collection_valued_path_, FROM , empty_collection_comparison_expression, collection_member_expression SIZE.

- CwsPubOperationRef, .

+1

, ​​ . Result set , OpenJPA fetchSize. < > , OpenJPA query.getResultList() -, . , , , . . fetchBatchSize OpenJPA !. , .

+1

Source: https://habr.com/ru/post/1789023/


All Articles