繁体   English   中英

JPA:单向OneToMany问题

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM