【问题标题】:JPA is not saving reference to parent entity in manytoone and onetomany relationJPA 未在多对单和单对多关系中保存对父实体的引用
【发布时间】:2018-05-30 18:37:12
【问题描述】:

如何配置 crud 存储库以拥有多个实体?

我有实体 Person 和 Numbe。人有数,数有人。

@Entity
public class Person{
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private long id;

    @Column(nullable = false)
    @OneToMany(mappedBy = "owner",cascade=CascadeType.ALL)
    private List<Number> numbers

    //getters and setters

}

@Entity
public class Number{
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private long id;

    @ManyToOne
    @JoinColumn("owner_id")
    private Person owner;

            //getters and setters
}

我有接口

@EnableJpaRepositories
public interface personIE extends CrudRepository<Person, Long> {
}

@EnableJpaRepositories
public interface numberIE extends CrudRepository<Number, Long> {
}

现在当我这样做时:

@Autowired
private personIE p_IE;

@Autowired
private numberIE n_IE;

public void test(){
  Person p = new Person();
  List<Number> numbers = new ArrayList<>();
  numbers.add(new Number());
  numbers.add(new Number());
  p.setNumbers(numbers)

  p_IE.save(p);

}

现在,当我想检查保存的内容并检索数据时,我只得到了 Person。 它的numbers 属性始终设置为[]。对象存在于数据库中,但是它们没有保存在关系中,为什么会这样,我该如何解决?

感谢您的帮助。

【问题讨论】:

  • 您确定您的实体配置正确吗?似乎两者都有@ManyToOne 关系还是错字?同样在一对多关系中,我总是确保设置子实体的父实体,这意味着每个 Number 设置 Person 字段。
  • @dashboard 打错了谢谢,Person 实体有 OneToMany 注释
  • 为所有numbers 调用numbers[i].setPerson(p) 怎么样?
  • @dashboard 可以,但这不是我想做的...
  • 我曾经遇到过这个问题,神秘的是因为子(编号)存储库。删除numberIE 再试一次怎么样?

标签: java spring jpa crud


【解决方案1】:

这是一种双向关系。所以你需要从双方设置参考。例如:

public void test() {
    Person person = new Person();
    Number number1 = new Number();
    Number number2 = new Number();

    number1.setPerson(person);
    number2.setPerson(person);

    List<Number> numbers = person.getNumbers();
    numbers.add(number1);
    numbers.add(number2);

    p_IE.save(p);
}

【讨论】:

  • 但级联不应该解决这个问题吗?
  • 级联用于从父实体到子实体的状态转换。因此cascading这个词
  • @Dingo:仪表板说的是对的,将对象保存在集合中并不意味着它的状态发生了变化。
猜你喜欢
  • 2021-08-08
  • 2020-04-08
  • 2013-04-25
  • 2021-05-25
  • 1970-01-01
  • 1970-01-01
  • 2014-02-21
  • 2015-10-24
  • 1970-01-01
相关资源
最近更新 更多