为什么 @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;
    }
}

实现一对多关系有两种方式:

  1. 使用联接 table
  2. 在多对一端使用外键

mappedBy用于第二种方式(使用外键)。如果要使用联接 table.

,则不必指定 mappedBy

使用连接 table 不是一个好主意,因为您无法使用 Hibernate 控制连接 table。例如,您不能直接将记录添加到联接 table。

what is @JoinColumn and how it is used in Hibernate