java - 双向一对多,一方为拥有方

标签 java hibernate jpa one-to-many bidirectional

没有办法让“一”成为一对多关系的所有者一方吗?每个样本在 @OneToMany 中都有 mappedBy。甚至是 this similar question 的答案有那个。

我希望一方成为拥有方,因为当我添加一个多/ child 时,我也会更改一个/ parent 的一些信息,我只想更新 parent ,以简化代码并确保它所有都在同一个 ACID 事务中。

但我就是做不到。 Hibernate 一直提示

Repeated column in mapping for entity

我的实体:

public class Parent {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Integer id;

    @OneToMany(fetch = EAGER, cascade = {ALL}, orphanRemoval = true)
    @JoinColumn(name = "parent_id", referencedColumnName = "id", nullable = false)
    private final Set<Child> children = new HashSet<>();

}

public class Child {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Integer id;

    @ManyToOne
    private Parent parent;

}

最佳答案

To solve Repeated column in mapping for entity error.

您可以从 @JoinColumn 注释中删除 nullable=false,如下所示:

代替

@JoinColumn(name = "parent_id", referencedColumnName = "id", nullable = false)

试试

@JoinColumn(name = "parent_id", referencedColumnName = "id", insertable = false, updatable = false)

但是如果你想保留nullable=false,那么

要么从 Child 类中删除 private Parent parent; 声明

使用 @Transient 注释或 private transient Parent parent;

使其成为 transient 的

关于java - 双向一对多,一方为拥有方,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35868327/

相关文章:

java - 如何获取当前选择的项目名称?

java - SpringBoot @RequestBody 抽象类验证

java - Gradle + hibernate

java - hibernate如何在表中间插入记录?

java - 我可以将 ComboBoxModel 转换为 int 吗?

java - 如何在具有多个服务器的同一数据库上使用 Camel JPA 组件?

java - 计划方法中的 NullPointer 异常

java - 如何生成 JPA 实体元模型?

java - 如何将模式名称添加到 Spring Data JPA 中的查询注释

java - 如何在大纲中显示父方法/变量?