【发布时间】:2018-08-01 06:27:42
【问题描述】:
我正在尝试建立一种奇怪的 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 到 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;
}
【问题讨论】:
标签: java hibernate jpa hibernate-mapping