Некоторое время назад в IRC мне приказали создавать скопированные сублисты при объединении связей сущности в моем методе обновления EJB. Мой вопрос: действительно ли это необходимо?безопасно используя JPA merge() с отношениями (eclipselink, glassfish 3.1)
Вот мой код ...
(в 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?
Спасибо. Вы говорите как общий принцип всегда использовать конструкторы копирования в методах setList() в JPA? Или это конкретный случай. – teefal
В общем да. – esej
Достаточно ли для equals() и hashcode() использовать уникальный идентификатор сущностей (если он существует), возможно, не уникальное значение munging (если еще нет)? – teefal