Hibernate与非主键一侧的OneToMany关系和另一侧的EmbeddedId

时间:2018-02-21 15:41:58

标签: java hibernate jpa hibernate-mapping

我正在尝试构建一个奇怪的OneToMany关系(由于遗留原因)。关系应该在i上,这是类P的正常列,也是类B的主键的一部分。

下面的方法只有在我创建P对象,将它们放入B对象(所有b的b.setP(p))并将所有B设置为P对象(p.getBs().addAll(bList))时才有效。

但是,如果我保存没有任何B的P对象,当我执行P p1 = session.get(P.class, p.getSI())时,我会得到以下异常,这对我没有任何意义。你有什么想法如何解决这个问题?

  

引起:java.lang.IllegalArgumentException:无法设置   java.lang.String字段   com.s.s.components.P.i to   java.lang.String中

@Entity
public class P {

  @Id
  @Expose
  @ValidUniqueId
  @NotEmpty
  @Column(nullable = false)
  String sI;

  @Expose
  String i;

  @OneToMany(fetch = FetchType.EAGER, cascade = CascadeType.ALL, mappedBy = "p")
  private Set<B> bs = new HashSet<>();  
}

@Embeddable
public class IPT implements Serializable {
  @Column(name = "i")
  private String i;

  @Column(name = "pT")
  private PT pT;
}

@Entity
public class B {
  @EmbeddedId
  private IPT iPT;

  @ManyToOne
  @MapsId("i")
  @JoinColumn(name = "i", referencedColumnName = "i", insertable = false, updatable = false)
  private P p;
}

1 个答案:

答案 0 :(得分:0)

我认为您需要将referencedColumnName更改为referencedColumnName = "sI",因为这是P

的ID