簡體   English   中英

Hibernate的雙向OneToOne關系在同一個類中不起作用

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM