Если вас беспокоит производительность, вы всегда можете определить двунаправленные отношения между сущностями, а затем управлять ими с другого конца.
@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);