我在使用Spring數據將以下提供的實體存儲到數據庫時遇到問題。 OneToOne關係在這兩者之間使用。它僅在parentObject被顯式設置爲childObject時有效。這不是一個好的解決方案,因爲我希望該子對象根本沒有父對象。有沒有可能? 非常相關的問題張貼hereOneToOne與共享ID的關係需要孩子知道父母
@Entity
@Table(name = "parent_object")
public class ParentObject {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "id", unique = true, nullable = false)
private Long id;
@Column(name = "age")
private Long age;
@OneToOne(cascade = CascadeType.ALL, mappedBy = "parentObject")
private ChildObject childObject;
public ParentObject() {
}
public ParentObject(Long age, ChildObject childObject) {
this.age = age;
this.childObject = childObject;
}
public Long getId() {
return id;
}
public Long getAge() {
return age;
}
public ChildObject getChildObject() {
return childObject;
}
public void setChildObject(ChildObject childObject) {
this.childObject = childObject;
}
}
@Entity
@Table(name = "child_object")
public class ChildObject {
@Id
@Column(name = "child_id", unique = true, nullable = false)
private Long id;
@MapsId
@OneToOne
@JoinColumn(name = "child_id")
private ParentObject parentObject;
@Column(name = "name")
private String name;
public ChildObject() {
}
public ChildObject(String name) {
this.name = name;
}
public Long getId() {
return id;
}
public ParentObject getParentObject() {
return parentObject;
}
public String getName() {
return name;
}
public void setParentObject(ParentObject parentObject) {
this.parentObject = parentObject;
}
}
不過,我真的不喜歡parentObject設置爲ChildObject:
ChildObject childObject = new ChildObject("name");
ParentObject parentObject = new ParentObject(12L, childObject);
childObject.setParentObject(parentObject);
這是有共享ID的唯一途徑?如果沒有明確設置parentObject,然後下面的錯誤被拋出:
Caused by: org.hibernate.id.IdentifierGenerationException: attempted to assign id from null one-to-one property [test.ChildObject.parentObject]
at org.hibernate.id.ForeignGenerator.generate(ForeignGenerator.java:83) ~[hibernate-core-5.0.11.Final.jar:5.0.11.Final]
at org.hibernate.event.internal.AbstractSaveEventListener.saveWithGeneratedId(AbstractSaveEventListener.java:101) ~[hibernate-core-5.0.11.Final.jar:5.0.11.Final]
at org.hibernate.jpa.event.internal.core.JpaPersistEventListener.saveWithGeneratedId(JpaPersistEventListener.java:67) ~[hibernate-entitymanager-5.0.11.Final.jar:5.0.11.Final]
我已經從ChildObject類中刪除了parentObject字段,添加了@JoinColumn(name =「child_id」)private ParentObject childObject to parentObject,並且移除了mappedBy。我可能錯過了一些東西,因爲在給出建議後拋出以下錯誤: 引起:org.hibernate.id.IdentifierGenerationException:在調用save()之前必須手動分配此類的ids: –