Я встретил очень странное явление при использовании бульдозера в проекте jpa. У меня есть объект UserSupplier и объект поставщика.Странное явление при использовании бульдозера в проекте jpa, почему аннотация для отображения в ленивом объекте загрузки не может работать?
UserSupplier:
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "supplier_id", nullable = false)
private Supplier supplier;
В моем коде я сначала запрошу список UserSupplier, а затем преобразую его в список поставщиков.
List<Supplier> supplierList = new ArrayList<>(usList.size());
usList.forEach(us -> supplierList.add(us.getSupplier()));
Затем я конвертирую список поставщиков в список поставщиков и возвращаю его в Caller.
BeanMapper.mapList(supplierList, SupplierView.class);
Мой бульдозер настроить в этих объектах, как ниже
Supplier:
@Id
@GeneratedValue
@Mapping("supplierId")
private int id;
SupplierView:
private int supplierId;
Очень смешно, SupplierID в SupplierView всегда 0 (значение по умолчанию) ИНТ, но и другие fileds можно преобразовать успешно, только поле идентификатор из строя. Я не понимаю, почему это так, почему только поле id не может преобразовать в vendId, но могут быть другие поля?
Для вышеуказанной проблемы, есть ниже растворы
1. Change field name (supplierId to id):
Supplier:
// @Mapping("supplierId")
private int id;
SupplierView:
private int id;
but Caller(front-end) have to change code.
2. Change fetchType to eager:
UserSupplier:
@ManyToOne
private Supplier supplier;
Спасибо! Бог! Аннотация экспериментальна, теперь я знаю, почему ее функция настолько бедна. Но другие манеры настолько громоздки, особенно когда они используются с весенним ботинком. Я буду искать лучшую замену. – zhuguowei
Я столкнулся с [Model mapper] (http://modelmapper.org). После моего опыта работы с громоздким и глючным бульдозером я попробовал modelmapper в своих следующих проектах. Если вы попробуете это, я буду рад обратной связи, поскольку я еще не пробовал его ни в каком проекте. – OndrejM
Да, есть много заменителей, таких как orika, jmapper, mapstruct. Потому что я предпочитаю настройку аннотации. Возможно, я попробую jmapper (https://github.com/jmapper-framework/jmapper-core) – zhuguowei