Я довольно новичок в JPA / JDO и во всем мире объектной базы данных.
У меня есть сущность с набором строк, похожая на:
@Entity
public class Foo{
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
private Key id;
private Set<String> bars;
public void setBars(Set<String> newBars){
if(this.bars == null)
this.bars = new HashSet<String>;
this.bars = newBars;
}
public Set<String> getBars(){
return this.bars;
}
public void addBar(String bar){
if(this.bars == null)
this.bars = new HashSet<String>;
this.bars.add(bar);
}
}
Теперь,в другой части кода я пытаюсь сделать что-то вроде этого:
EntityManager em = EMF.get().createEntityManager();
Foo myFoo = em.find(Foo.class, fooKey);
em.getTransaction().begin();
myFoo.addBar(newBar);
em.merge(myFoo);
em.getTransaction().commit();
Когда, конечно, newBar - это строка.
Но я получаю следующее:
javax.jdo.JDODetachedFieldAccessException: You have just attempted to access field "bars" yet this field was not detached when you detached the object. Either dont access this field, or detach it when detaching the object.
Я искал ответ, но не смог его найти.
Я видел, как кто-то спрашивал о наборе строк, и ему сказали добавить @ElementCollection обозначения.
Я пытался это сделать, но получил ошибку о метаданных класса String (я не совсем понимаю, что это значит.)
Я был бы очень признателен за помощь в этом вопросе, даже еслихорошая ссылка на кого-то, объясняющего это (простым английским языком).