我試圖在Hibernate中映射雙向(一對多和多對一)關係。嘗試保存結果時發生錯誤。映射雙向一對多Hibernate實體
我們得到的錯誤是:
產生的原因:org.hibernate.PropertyValueException:非空屬性引用null或瞬時值:在org.hibernate作爲com.example.Component.resultId .engine.internal.Nullability.checkNullability(Nullability.java:92)
從Result
下面的源代碼可以具有許多Component
S和許多Component
S可屬於單個Result
。其中一個要求是resultId
在Result
必須是String
。這個要求超出了我們的控制範圍。
一個例子實體源代碼如下:
@Entity
@Table(name = "result")
@Inheritance(strategy = InheritanceType.SINGLE_TABLE)
public abstract class Result extends AbstractEntity {
@OneToMany(cascade = CascadeType.MERGE)
@JoinColumn(name = "resultId")
private List<Component> component = new ArrayList<>();
}
@Entity
@Table(name = "cmpt")
@XmlRootElement
public class Component extends AbstractEntity {
@ManyToOne(targetEntity = Result.class)
private String resultId;
}
這裏是爲我工作
@Entity
@Table(name = "result")
@Inheritance(strategy = InheritanceType.SINGLE_TABLE)
public abstract class Result extends AbstractEntity {
@OneToMany(cascade = CascadeType.MERGE, nullable = false)
@JoinColumn(name = "resultId")
private List<Component> component = new ArrayList<>();
}
@Entity
@Table(name = "cmpt")
@XmlRootElement
public class Component extends AbstractEntity {
@Column(name = "result_id", insertable = false, updatable = false, nullable = false)
private String resultId;
}
什麼是ID字段的實體類型? '@ OneToMany'上的'@ JoinColumn'註釋是無用的,而類型爲String的字段上的'@ ManyToOne'註解也是無用的,因爲你只能在實體上使用這個註解。 – ujulu