JPA没有在多人和onetomany关系中保存对父实体的引用

时间:2018-05-30 18:37:12

标签: java spring jpa crud

如何为多个实体配置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属性总是设置为[]。对象存在于数据库中,但它们没有保存在关系中,为什么会这样,我该如何解决?

感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

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

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);
}