IRC でしばらく前に、EJB 更新メソッドでエンティティの関係をマージするときに、コピーされたサブリストを作成するように言われました。私の質問は次のとおりです。これは本当に必要ですか?
これが私のコードです...
(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;
}
関係は次のように定義されます。
(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;
}
これは私が現在行っている方法ですが、非常に時折不安定な動作が発生しています(二重リストが何らかの形で作成されています)。
私の質問は、CascadeType.MERGE を追加して、単に CtCaseEJB でこれを行うことができないのはなぜですか...
public CtCase update( CtCase pCase )
{
return em.merge( pCase );
}
JPA/EJB でリレーションシップを手動でマージする必要があるのはなぜですか?