2012-03-11 4 views
0

Хорошо. Допустим, у меня есть это:Как вставить новый узел в список JPA?

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

class Leg{ 
float lenght; 
} 

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

3-Слить собаку .: em.merge (собака);

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

ответ

0

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

@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.

Dog d = entityManager.find(Dog.class, Long.valueOf(1)); 
Leg l = new Leg(); 
l.setDog(d); 
l = entityManager.persist(l); 
+0

Отображение ставок - это простой способ получить это, но я не согласен с его использованием, но когда это действительно необходимо. Это единственная альтернатива для загрузки всей собаки? –

+0

Вы ищете трудный путь? Вы всегда можете сгладить атрибуты объекта и вручную отобразить JDBC. – Perception

+0

Нет, я просто посмотрю, как выглядит сопоставление ставок, как увеличение зависимости в моем OOP. Desing: S, не так ли? –

Смежные вопросы