我正在尝试构建一个奇怪的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;
}
答案 0 :(得分:0)
我认为您需要将referencedColumnName
更改为referencedColumnName = "sI"
,因为这是P