不久前,在 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 中手动合并关系?