【发布时间】:2016-02-08 16:03:59
【问题描述】:
我正在使用 EclipseLink 和 JPA 2.0。
这是我的两个实体:
馈线实体:
@Entity
@Table(name = "t_feeder")
public class Feeder implements Serializable {
private static final long serialVersionUID = 1L;
//Staff
@OneToMany(cascade = CascadeType.ALL, mappedBy = "idAttachedFeederFk")
private Collection<Port> portCollection;
//staff
}
端口实体:
@Entity
@Table(name = "t_port")
public class Port implements Serializable {
//staff
@JoinColumn(name = "id_attached_feeder_fk", referencedColumnName = "id")
@ManyToOne
private Feeder idAttachedFeederFk;
//staff
}
这是我的代码:
Feeder f = new Feeder();
//staff
Port p = new Port();
p.setFeeder(f);
save(feeder); //This is the function that calls finally persist.
问题是,只有馈线是持久的,而不是端口。我错过了什么吗?特别是,我应该在哪一边确切地提到级联。鉴于在我的数据库中,port 表使用外键引用 feeder 表。
编辑
这段简单的代码很适合我:
public static void main(String[] args) {
Address a1 = new Address();
a1.setAddress("madinah 0");
Employee e1 = new Employee();
e1.setName("houssem 0");
e1.setAddressFk(a1);
saveEmplyee(e1);
}
【问题讨论】:
-
是的,您错过了这样一个事实,即 Feeder 在保存之前对这个新的 Port.Call feeder.getPortCollection().add(p) 一无所知,它会起作用。我还建议按照此处概述的方式封装这些操作。 stackoverflow.com/questions/19840832/…
-
但是feeder还没管理好!
-
对不起,我不明白。我给出的答案是正确的。
-
它给了我一个空指针异常,我认为这很正常,因为 feeder 还没有 portCollection,可能是这样吗?
-
如果由于某种奇怪的原因你不能初始化一个新的集合(我可以保证这不会从 JPA 的角度破坏任何东西)那么你唯一的选择是在 @ManyToOne 上添加一个级联并调用 save(端口),因为新端口知道它的馈线(但反之亦然)。
标签: mysql jpa eclipselink