Я новичок в 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);
Это, я надеялся, я бы использовал .. но это не так.
Кто-нибудь имеет представление о том, как это может быть достигнуто?Заранее спасибо, ребята.