[英]Hibernate Entity OneToOne with same Primary and Foreign Key Bidirectional Relationship
[英]Hibernate's bidirectional OneToOne relationship not working within the same class
我正在嘗試使用同一個類的One to One hibernate關系創建“一系列命令”:
@Entity
public class Command {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "id", unique = true)
private Long id;
@ElementCollection
@LazyCollection(LazyCollectionOption.FALSE)
private List<String> commandWithArguments = new ArrayList<String>();
private ExecutionStatus status = ExecutionStatus.NOT_EXECUTED;
@OneToOne(mappedBy = "parentCommand", cascade = CascadeType.ALL)
private Command child;
@OneToOne(mappedBy = "child", cascade = CascadeType.ALL)
private Command parentCommand;
@OneToOne(mappedBy = "command")
private ExecutionResult result;
public Command() {
}
....
hibernate是否支持這樣的關系? 它在初始化期間拋出以下異常:
Initial SessionFactory creation failed.org.hibernate.AnnotationException: Unknown mappedBy in: com.dockerhosting.domain.system.Command.child, referenced property unknown: com.dockerhosting.domain.system.Command.parentCommand
但是,您可以看到parentCommand屬性沒有丟失。
我正在使用hibernate 4.3.8
如果是父母或孩子,您需要指定誰將在您的雙向關系(擁有方)中攜帶外鍵
孩子將包含parrent的參考(FK)
@OneToOne(cascade = CascadeType.ALL)
private Command child;
@OneToOne(mappedBy = "child", cascade = CascadeType.ALL)
private Command parentCommand;
家長將包含孩子的參考(FK)
@OneToOne(mappedBy = "parentCommand", cascade = CascadeType.ALL)
private Command child;
@OneToOne(cascade = CascadeType.ALL)
private Command parentCommand;
我認為你的問題是你為同一個映射定義了兩個mappedBy
屬性,所以Hibernate會在映射中感到困惑。
所以使用其中兩個是不必要的,你有兩個選擇:
1.在類中只使用一個Command
對象,並將其映射到OneToOne
如下所示:
@OneToOne(cascade = CascadeType.ALL)
private Command parentCommand;
2.或者使它像你一樣雙向使用你的類中的兩個Command
對象,並用OneToOne
映射它們中的兩個, 但只使用mappedBy
和child來引用parentCommand
:
@OneToOne(mappedBy = "parentCommand", cascade = CascadeType.ALL)
private Command child;
@OneToOne(cascade = CascadeType.ALL)
private Command parentCommand;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.