[英]JPA: uni-directional OneToMany question
我有以下课程:
class A{
@OneToOne(cascade=CascadeType.ALL)
private B b;
}
class C{
@ManyToOne
private A a;
}
class B{
@OneToOne
private A a;
@MapKey(name = "name")
@OneToMany(cascade = CascadeType.ALL, ...)
@JoinColumn(...)
private Map<String C> cs;
}
我如何在B.cs上指定映射以加入其中Ba == Ca?
这可能吗? 还是我必须将属性Ca更改为Cb? (我宁愿保持原样,因为实体B只是一个帮助器类。)我还尝试将B更改为@Embeddable,但可嵌入对象不支持Map。
JPA要求所有关系都应按ID(外键引用主键)进行。 因此,您需要从C向B添加一个@ManyToOne。或者,确保B的ID是A的外键(将@OneToOne上的@Id从B添加到A,并删除A的另一个@Id)。 如果B是A的子类,而不是具有OneToOne,这也将起作用。
如果使用的是EclipseLink,则可以为关系定义更复杂的条件。 您将需要使用DescriptorCustomizer和OneToManyMapping API定义OneToMany的外键。
我认为您可以从A扩展B。
如果这不适合您,也许您可以添加一个临时属性来引用A的ID,
@Transient Integer getId1() { return a.getId(); }
并使用
id1
代替B的主键加入C。
编辑:这不起作用。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.