JPA не сохраняет ссылку на родительский объект во множественном и одномоментном отношении - PullRequest
0 голосов
/ 30 мая 2018

Как мне настроить хранилище 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);

}

Теперь, когда я хочупроверить, что было сохранено, и получить данные, я получаю только человека.Его свойство numbers всегда установлено на []. Объекты существуют в базе данных, однако они не сохраняются в отношении, почему это так и как я могу это исправить?

Спасибо за помощь.

1 Ответ

0 голосов
/ 30 мая 2018

Это двунаправленные отношения.Так что вам нужно установить ссылку с обеих сторон.Например:

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