我有一個非常簡單的一個一對多的關係Hibernate的多對一外鍵沒有得到設置
[SampleAliasMask] has many [SampleAliasMaskPart]
我的問題是,當我堅持SampleAliasMask的新實例收集部,我得到一個違反了從SampleAliasMaskPart到SampleAliasMask的表的外鍵鏈接被設置爲NULL的約束違規。
我使用冬眠註釋作爲這樣的映射:
@Entity
@Table(name="SAMPLE_ALIAS_MASK")
public class SampleAliasMask extends ClientEntity {
@OneToMany(mappedBy = "sampleAliasMask", fetch = FetchType.EAGER, cascade = javax.persistence.CascadeType.ALL, orphanRemoval = true)
@Cascade(CascadeType.ALL)
@Length(min = 1, message = "The sample alias mask must have components")
private Set<SampleAliasMaskPart> components;
隨着關係的另一半映射爲這樣:
@Entity
@Table(name="SAMPLE_ALIAS_MASK_PART")
public class SampleAliasMaskPart extends ClientEntity {
@ManyToOne(optional = false, fetch = FetchType.LAZY)
@JoinColumn(name = "SAMPLE_ALIAS_MASK_ID", nullable = false)
private SampleAliasMask sampleAliasMask;
ClientEntity的相關部分是
@MappedSuperclass
public abstract class ClientEntity {
@Id
@Column(name="ID")
@GeneratedValue(strategy = GenerationType.AUTO)
private long id;
我正在創建這樣的零件:
HashSet<SampleAliasMaskPart> components = new HashSet<>();
for(Map<String, Object> c : this.components) {
SampleAliasMaskPart component = new SampleAliasMaskPart(Integer.parseInt(c.get("value").toString(), 10), c.get("name").toString());
result.validate(component);
components.add(component);
}
mask.setComponents(components);
確切的錯誤我得到的是:
java.sql.BatchUpdateException: ORA-01400: cannot insert NULL into ("ST"."SAMPLE_ALIAS_MASK_PART"."SAMPLE_ALIAS_MASK_ID")
我懷疑問題是與事實做,我從來沒有明確設置SampleAliasMaskPart.sampleAliasMask但爲什麼我需要?這種關係永遠不會暴露,也不會導航。該字段僅用於映射目的,這使我認爲我正在映射這個錯誤。
添加爲評論,因爲它不回答你的問題,但你想知道。 '@ Length'驗證字符串長度。您需要'@ Size'來代替。 – 2012-01-08 23:08:11
謝謝,那就是我想要的,是的 – 2012-01-09 00:06:35