为什么 @ManyToOne 中没有 mappedBy 属性
Why there is no mappedBy attribute present in @ManyToOne
我是 JPA 新手,正在尝试了解用于双向 OneToMany 关系的 @JoinTable 注释b/w Project 和 Task 实体,其中 Project 可以有多个任务。
我可以将@JoinTable 与具有@ManyToOne 注释的实体一起使用,但是当我将@JoinColumn 放置在具有@OneToMany 的另一个实体上时,我无法获得在@ManyToOne 注释上指定“mappedBy”属性的选项。
我想知道为什么?
我已经尝试在两个实体上放置 @JoinTable 注释,但是 Hibernate 正在尝试在 Join 中插入两条记录 table
项目实体:-
@Entity
@Data
public class Project {
@Id
@Column(name = "project_pk")
@GeneratedValue
private Long id;
@Column(name = "project_name")
private String name;
@OneToMany(mappedBy = "project", cascade = CascadeType.ALL)
List<Task> tasks;
}
任务实体:-
@Entity
@Data
public class Task {
@Id
@GeneratedValue
@Column(name = "task_pk")
private Long id;
public Task() {
}
private String name;
@ManyToOne(cascade = CascadeType.ALL)
@JoinTable(name = "project_related_tasks",
inverseJoinColumns = @JoinColumn(name = "project_id", referencedColumnName = "project_pk"),
joinColumns = @JoinColumn(name = "task_id", referencedColumnName = "task_pk")
)
private Project project;
public Task(String name) {
this.name = name;
}
}
实现一对多关系有两种方式:
- 使用联接 table
- 在多对一端使用外键
mappedBy
用于第二种方式(使用外键)。如果要使用联接 table.
,则不必指定 mappedBy
使用连接 table 不是一个好主意,因为您无法使用 Hibernate 控制连接 table。例如,您不能直接将记录添加到联接 table。
what is @JoinColumn and how it is used in Hibernate
我是 JPA 新手,正在尝试了解用于双向 OneToMany 关系的 @JoinTable 注释b/w Project 和 Task 实体,其中 Project 可以有多个任务。
我可以将@JoinTable 与具有@ManyToOne 注释的实体一起使用,但是当我将@JoinColumn 放置在具有@OneToMany 的另一个实体上时,我无法获得在@ManyToOne 注释上指定“mappedBy”属性的选项。
我想知道为什么?
我已经尝试在两个实体上放置 @JoinTable 注释,但是 Hibernate 正在尝试在 Join 中插入两条记录 table
项目实体:-
@Entity
@Data
public class Project {
@Id
@Column(name = "project_pk")
@GeneratedValue
private Long id;
@Column(name = "project_name")
private String name;
@OneToMany(mappedBy = "project", cascade = CascadeType.ALL)
List<Task> tasks;
}
任务实体:-
@Entity
@Data
public class Task {
@Id
@GeneratedValue
@Column(name = "task_pk")
private Long id;
public Task() {
}
private String name;
@ManyToOne(cascade = CascadeType.ALL)
@JoinTable(name = "project_related_tasks",
inverseJoinColumns = @JoinColumn(name = "project_id", referencedColumnName = "project_pk"),
joinColumns = @JoinColumn(name = "task_id", referencedColumnName = "task_pk")
)
private Project project;
public Task(String name) {
this.name = name;
}
}
实现一对多关系有两种方式:
- 使用联接 table
- 在多对一端使用外键
mappedBy
用于第二种方式(使用外键)。如果要使用联接 table.
mappedBy
使用连接 table 不是一个好主意,因为您无法使用 Hibernate 控制连接 table。例如,您不能直接将记录添加到联接 table。
what is @JoinColumn and how it is used in Hibernate