mapstruct: двунаправленная обработка - PullRequest
0 голосов
/ 22 марта 2019

Я новичок в mapstruct.У меня есть набор объектов гибернации, которые для простоты позволяют только 2 с именами A и B с отношением гибернации OneToOne (если я сделаю это на этом, я думаю, что я могу сделать это тогда на более сложных сценариях).

    class A{
      @Id
      private Long id;

      private String z;

      @OneToOne
      private B b;
    }

  class B{
      @Id
      private Long id;

      private String x;

      @OneToOne(mappedBy = "b", optional = false)
      private A a;
    }

Iтакже есть:

   class ADto{  
      private String z;
    }

  class BDto{   
      private String x;
    }

Наконец-то у меня есть

@Mapper
public interface LabTestMapper {
    @Mapping(target = "id", ignore = true)
    A adtoToA(Adto a);

    ADto aToAdto (A a);

    @Mapping(target = "id", ignore = true)
    B bdtoToB(Bdto b);

    BDto bToBdto (B b);
}

Очевидно, что это не мой код ... но он объяснит, что мне нужно, и мою проблему.

Послес помощью adtoToA () сгенерированный код выполняет следующие действия:

Ab имеет значение.- Для создания Ab он использовал bdtoToB, но Aba имеет значение null.Это, как я полагаю, создает проблему в кэше гибернации, так как при попытке получить b, ba имеет значение null (до перезапуска сервера).

Так что мне нужен способ, чтобы сгенерированный ab указывал на a (аналогично тому, как это было быпосмотрите, извлек ли я объект из моей базы данных.)

Я попытался в интерфейсе внести следующее изменение

    @Mapping(target = "id", ignore = true)
    B bdtoToB(Adto a, Bdto b);

Это, я надеялся, я бы использовал .. но это не так.

Кто-нибудь имеет представление о том, как это может быть достигнуто?Заранее спасибо, ребята.

...