Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何在JPA中插入要列出的新节点?_Java_Jpa_Collections_Jpql - Fatal编程技术网

Java 如何在JPA中插入要列出的新节点?

Java 如何在JPA中插入要列出的新节点?,java,jpa,collections,jpql,Java,Jpa,Collections,Jpql,嗯。假设我有: class Dog{ String name; List<Leg> legs; //get and set } class Leg{ float lenght; } 类狗{ 字符串名; 列出腿; //出发 } 班腿{ 浮动长度; } 要为狗添加新的腿(假设它有3条腿): 1-查询此项:从Dog d join d.legs中选择d,其中d.id=1 2-在我得到狗的参考后,我会在列表中添加一条新的腿: dog.getLegs().add(新的Leg(3.9)) 3

嗯。假设我有:

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

class Leg{
float lenght;
}
类狗{
字符串名;
列出腿;
//出发
}
班腿{
浮动长度;
}
要为狗添加新的腿(假设它有3条腿): 1-查询此项:从Dog d join d.legs中选择d,其中d.id=1 2-在我得到狗的参考后,我会在列表中添加一条新的腿: dog.getLegs().add(新的Leg(3.9))

3-合并狗:em.Merge(狗)

这是更新集合的唯一方法吗?我只是想知道dog实例是否占用了不必要的堆空间。
感谢Java专业人士。

如果您担心性能,那么您可以在实体之间定义双向关系,然后从另一端进行管理

@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;
}

投标映射是一个简单的方法来通过这一点,但我不同意使用它,但当真的需要。这是唯一的选择,以负载整个狗?你在寻找一个艰难的方式吗?你可以随时展平你的对象属性并手动映射JDBC。没有人,我只是在我的OOP设计中增加了依赖性,不是吗?
Dog d = entityManager.find(Dog.class, Long.valueOf(1));
Leg l = new Leg();
l.setDog(d);
l = entityManager.persist(l);