У меня есть следующий код (упрощенно, конечно):
@Entity
public class Foo {
@Generated
private Long id;
@OneToMany(mappedBy=foo)
@Cascade(CascadeType.PERSIST)
private Collection<Bar> bars;
...
}
@Entity
public class Bar {
@Generated
private Long id;
@ManyToOne
@NotNull
private Foo foo;
...
}
Из многих примеров, которые я видел, это должно работать:
Foo foo = new Foo();
Bar bar = new Bar();
bar.setFoo(foo);
Bar bar2 = new Bar();
bar2.setFoo(foo);
foo.bars.add(bar);
foo.bars.add(bar2);
hibernateTemplate.save(foo);
Когда я говорю "это должно работать "Я имею в виду, что я ожидаю, что когда я посмотрю на таблицу БД Foo, у меня будет строка для Foo (предположим, с id = 1) и две строки в Bar, каждая со значением 1 (idof foo) в столбце foo_id.
В действительности происходит следующее: я получаю исключение:
org.hibernate.PropertyValueException: not-null property references a null or transient value:
на Bar.foo.Если я удаляю @NotNull, сохранение завершается успешно, но в столбце foo_id у меня есть ноль, а не значение 1.
Так что мой вопрос: является ли это известной ошибкой в Hibernate, которая не работает при сохранении Cascadeили я просто не понимаю, как его использовать?