当前位置: 首页 > 知识库问答 >
问题:

为什么@ManyToOne中没有mappedBy属性

严心水
2023-03-14

我是一个JPA新手,正在尝试理解@Jointable annotation用于双向、单管关系、B/W项目和任务实体,其中项目可以有多个任务。

我可以将@Jointable与具有@ManyToOne注释的实体一起使用,但当我将@JoinColumn放置在具有@OneToMany的另一个实体上时,我没有在@ManyToOne注释上指定“MappedBy”属性的选项。

我想知道为什么?

我尝试在这两个实体上放置@jointable注释,但随后Hibernate将在联接表中插入两条记录

项目实体:-

@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个答案

毕胡非
2023-03-14

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

  1. 使用联接表
  2. 在多对一侧使用外键

mappedby用于第二种方式(使用外键)。如果要使用联接表,则不必指定mappedby

使用连接表不是很好的主意,因为您无法使用Hibernate控制该连接表。例如,不能直接将记录添加到联接表中。

什么是@joincolumn以及如何在Hibernate中使用它

 类似资料:
  • 问题内容: 我知道每次键入字符串文字时,字符串池中都会引用相同的String对象。 但是,为什么String API不包含,所以我可以使用引用? 至少,这将节省编译时间,因为编译器将知道引用现有的String,而不必检查是否已创建它以进行重用,对吗?我个人认为,字符串文字(尤其是很小的文字)在许多情况下是一种“代码异味”。 那么是否没有String.Empty背后的宏伟设计原因,还是语言创建者根本

  • 问题内容: 在Java中,有和接口。两者都属于Java的标准框架,并提供了一种访问元素的分类方法。 但是,据我了解没有。你可以用来对列表进行排序。 知道为什么要这样设计吗? 问题答案: 列表迭代器首先确保你以列表的内部顺序(也称为插入顺序)获取列表的元素。更具体地说,它是按照插入元素的顺序或操作列表的方式进行的。排序可以看作是对数据结构的一种操作,有几种方法可以对列表进行排序。 我将按照自己的见解

  • 问题内容: 为什么JavaFX中没有ObservableQueue?如果我们查看FXCollection的Java 9文档(只是看一下8的变化),我们会看到用于创建Observable集,列表和映射的静态助手方法。还有一些创建Observable float和integer数组的方法。但是,无法创建ObservableQueue。Java中的Queue接口具有许多有趣的实现,包括ArrayDequ

  • 嗨,我正在学习Spring JPA使用OneToMany和ManyToOne双向关系,在一些示例中,我看到OneToMany和ManyToOne关系,当我在两个方面编写时,JPA添加一个新列作为外键列,并插入父表中的键值。但当我尝试我的时候,这一栏总是空白的。下面是我的代码的样子: 下面是我的Account.java模型: 下面是我的dealer.java模型: 这里是我的控制器: 然后将JSON

  • 问题内容: 我有一个类MyThread。在那我有一个方法示例。我试图从相同的对象上下文中运行它。请看一下代码: 看起来很简单,不是吗。但是当我运行它时,我得到这个错误 现在,我就在那里使用该方法。那怎么了 请帮忙 编辑:这是堆栈跟踪 我这样称呼它 抱歉,我无法发布redisOps类代码。但我可以向您保证,它的效果很好 问题答案: 您的缩进已弄糟,并且您混用了制表符和空格。运行脚本进行验证。

  • 问题内容: 我正在尝试做这样的事情: 不幸的是,即使在Java 9中也不存在。 为什么它被遗漏了? 建议的解决方法是什么? 问题答案: 为什么它被遗漏了? 该API提供了可重用的构建块。这里的相关积木是,,。通过这些,您可以实现所需的功能:将流内映射到对象,然后获得平面图。提供构建基块的排列是不切实际的,并且很难扩展。 建议的解决方法是什么? 如前所述,使用可用的构建基块(+ ):