Как заставить ленивые отношения сохраняться в спящем режиме реактивно

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

Любое предложение приветствуется.