Как вставить новый узел в список в JPA? - PullRequest
0 голосов
/ 11 марта 2012

Хорошо. Допустим, у меня есть это:

class Dog{
String name;
List<Leg> legs;
//get and set
}

class Leg{
float lenght;
}

Чтобы добавить новую ногу собаке (допустим, у нее 3): 1-Запрос это: выберите d из Dog d присоединиться к d.legs, где d.id = 1 2-После того, как я получу ссылку на собаку, я добавлю новую ногу в список: dog.getLegs (). add (новый Leg (3.9));

3-Merge the dog .: em.merge (собака);

Это единственный способ обновления коллекций? Мне просто интересно, если экземпляр собаки занимает ненужное пространство кучи. Спасибо Java PROS.

1 Ответ

0 голосов
/ 11 марта 2012

Если вас беспокоит производительность, вы всегда можете определить двунаправленные отношения между сущностями, а затем управлять ими с другого конца.

@Entity
@Table(name = "dog")
public class Dog {
    private String name;

    @OneToMany(cascade = CascadeType.ALL, fetch = FetchType.LAZY)
    @JoinTable(name = "dog_legs", joinColumns = { @JoinColumn(name = "dog_id", unique = true) }, inverseJoinColumns = { @JoinColumn(name = "leg_id") })
    private Set<Leg> legs;
}

@Entity
@Table(name = "legs")
public class Leg {
    private Integer length;

    @ManyToOne(cascade = CascadeType.ALL, fetch = FetchType.LAZY, mappedBy="legs")
    private Dog dog;
}

С этим двунаправленным отображением вы можете сохранить ногу Собаки только с затратами на загрузку объекта Собаки.

Dog d = entityManager.find(Dog.class, Long.valueOf(1));
Leg l = new Leg();
l.setDog(d);
l = entityManager.persist(l);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...