A while back on IRC I was told to create copied subLists when merging an entity's relationships in my EJB update method. My question is: is this really necessary?
Here's my code ...
(in CtCaseEJB)
public CtCase update( CtCase pCase )
{
CtCase aCtCase = em.merge( pCase );
...
List<CtCaseTest> aCaseTestList = pCase.getCaseTests();
List<CtCaseTest> aNewCaseTestList = new ArrayList<CtCaseTest>();
for( CtCaseTest aCaseTest : aCaseTestList )
{
aCaseTest = em.merge( aCaseTest );
aNewCaseTestList.add( aCaseTest );
}
aCtCase.setCaseTests( aNewCaseTestList );
...
return aCtCase;
}
The relationship is defined as:
(in CtCase)
private List<CtCaseTest> mCaseTests = new ArrayList<CtCaseTest>();
@OneToMany( mappedBy = "ctCase", cascade = { CascadeType.PERSIST, CascadeType.REFRESH } )
@OrderBy( "rank" )
public List<CtCaseTest> getCaseTests()
{
return mCaseTests;
}
public void setCaseTests( List<CtCaseTest> pCaseTests )
{
mCaseTests = pCaseTests;
}
This is how I'm currently doing it, though I'm getting some very occassional wonky behavior (doubled lists are getting created somehow).
My question is: why can't I add CascadeType.MERGE and simply do this in CtCaseEJB ...
public CtCase update( CtCase pCase )
{
return em.merge( pCase );
}
Why the need for manually merging relationships in JPA/EJB?