JPA不会将外键设置为单向@OneToMany关系
我有两个单向关系的类:JPA不会将外键设置为单向@OneToMany关系,jpa,eclipselink,one-to-many,Jpa,Eclipselink,One To Many,我有两个单向关系的类: @Entity public class A { @OneToMany(cascade = CascadeType.ALL) @JoinColumn(name="fk_column") private List<B> bList; ... } @Entity public class B { ... } 然后a和b在数据库中进行初始持久化,b获得了a的正确外键 但当我在另一笔交易中这样做时: A a = loadFromD
@Entity
public class A {
@OneToMany(cascade = CascadeType.ALL)
@JoinColumn(name="fk_column")
private List<B> bList;
...
}
@Entity
public class B {
...
}
然后a和b在数据库中进行初始持久化,b获得了a的正确外键
但当我在另一笔交易中这样做时:
A a = loadFromDatabaseByJPQLQuery();
B anotherB = new B();
a.getBList().add(anotherB);
em.merge(a);
然后另一个B确实是persist,但它在fk_列中的外键为null
如何确保密钥正确存储?我无法从您的示例中找出它,因此我将询问,实体B定义了
@ManyToOne
列?另外,在@OneToMany
上,您可以使用批注的属性mappedBy
来定义谁持有该关系,而不是@JoinColumn
。不,它是单向关系。B中没有@manyTone。请尝试添加@JoinColumn
属性referencedColumnName
,并查看有关该属性的更多信息。没有。同样,对于referencedColumnName
属性,它不起作用。不起作用的示例似乎与工作示例完全相同,JPA也应如此对待。尝试打开日志记录,看看是否显示了什么;EclipseLink应插入带有null的B,然后在处理对“a”关系的更改时更新该行。
A a = loadFromDatabaseByJPQLQuery();
B anotherB = new B();
a.getBList().add(anotherB);
em.merge(a);