#hibernate #lazy-evaluation #quarkus #reactive #mutiny
Вопрос:
Я использую Quarkus с реактивной гибернацией, я не могу сделать так, чтобы мои сущности сохранялись, как только я добавил аннотацию @OneToMany. Я покажу вам весь свой код:
Сущность первая: дерево:
@Entity(name = "Tree")
@Table(name = "tree")
public class Tree{
@Id
@Column(length = 50, unique = true)
public String name;
@OneToMany(mappedBy = "owner", cascade = CascadeType.ALL, orphanRemoval = true, fetch = FetchType.LAZY)
@JsonManagedReference
private List<Fruit> treeFruits;
public void addFruits(Fruit fruit) {
treeFruits.add(fruit);
fruit.setOwner(this);
}
public void addFruits(List<Fruit> fruits) {
treeFruits.addAll(fruits);
fruits.stream().forEach(f->f.setOwner(this) );
}
// Getters and setters removed
Сущность вторая: фрукты:
@Entity
@Table(name = "fruit")
public class Fruit {
@Id
@Column(length = 50, unique = true)
public String name;
@Column(length = 200)
public String description;
@Column(length = 50)
public String family;
@Column(nullable = false)
public Boolean ripen = false;
@ManyToOne //(fetch = FetchType.LAZY)
@JoinColumn(name = "tree_name", referencedColumnName = "name")
@JsonBackReference
private Tree owner;
Хранилище деревьев:
@ReactiveTransactional
public Uni<Tree> create(Tree tree) {
return sf.withTransaction((s, t) -> {s.persist(tree); return s.flush();})
.replaceWith(sf.withTransaction((s, t) -> s.find(Tree.class, tree.name)));
}
Метод create не сохраняет дерево в базе данных, поэтому все вызовы session.find(…) возвращают значение null.
Перед добавлением отношения дерева к плодам, с помощью этого метода все сохраняется нормально в хранилище фруктов
public Uni<Fruit> create(Fruit fruit) {
return sf.withTransaction((s, t) -> s.persist(fruit))
.replaceWith(sf.withTransaction((s, t) -> s.find(Fruit.class, fruit.name)));
}
Любое предложение приветствуется.