У меня есть этот конкретный случай, который вызывает у меня некоторые сомнения: у моего класса A есть отношение один-ко-многим с B:
A 1----->* B
, что, насколько я знаю, делает принадлежащие им экземпляры принадлежащимив той же группе лиц.Мне нужно извлечь один конкретный экземпляр A и один из его B, поэтому я ищу A и перебираю его список B, чтобы найти конкретный B (всегда поиск по Id).После этого я изменяю один атрибут A и B и фиксирую свои изменения путем слияния A. Итак, вот мои вопросы:
- Зная, что я должен получить A и B (потому что я должен изменить оба)Должен ли я выполнить 2 поиска вместо итерации списка B?
- При 2 поисках изменения в B будут сохранены, если я сохраню только A?
- Будет ли вопрос 1 и 2 иметь одинаковый ответв этом случае:
A 1----->* C 1----->* B
Дополнение вопроса некоторым кодом:
@Entity
public class A
{
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Key key;
private int aField;
@OneToMany(cascade={CascadeType.ALL})
private List<B> bList;
//...
}
@Entity
public class B
{
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Key key;
private int someBField;
// no way to get A from here...
//...
}
public void someService1(Key aKey, Key bKey)
{
//...
// Here, I'm sure that bKey is of an entity son of aKey entity (I trust the client)
A a = entityManager.find(A.class, aKey);
a.setAField(a.getAField()++);
for(B b : a.getBList())
if(b.getKey().equals(bKey))
b.setSomeBField(b.getSomeBField()++);
entityManager.merge(a);
//...
}
public void someService2(Key aKey, Key bKey)
{
//...
// Here, I'm sure that bKey is of an entity son of aKey entity (I trust the client)
A a = entityManager.find(A.class, aKey);
a.setAField(a.getAField()++);
B b = entityManager.find(B.class, bKey);
b.setSomeBField(b.getSomeBField()++);
entityManager.merge(a);
//...
}
Ну, и someService1, и someService2 делают одно и то же, если я все сделал правильно.Какой из них лучше?