Я делаю эксперимент с jHipster.Как исправить двусмысленные методы сопоставления
Я создал два объекта A и B, поддерживаемые DTO (mapstruct). Между ними существует взаимосвязь «многие-ко-многим». У них обоих есть отношения «много-к-одному» с пользователем.
До создания последних отношений все работает нормально. После создания последних многих к одному отношений, я получаю следующее сообщение об ошибке:
[INFO] --- maven-processor-plugin:2.2.4:process (process) @ m2m ---
[ERROR] diagnostic: /Users/andy/jhipster-m2m/src/main/java/com/m2m/web/rest/mapper/AMapper.java:18: error: Ambiguous mapping methods found for mapping property "java.lang.Long userId" to com.m2m.domain.User: com.m2m.domain.User userFromId(java.lang.Long id), com.m2m.domain.User com.m2m.web.rest.mapper.BMapper.userFromId(java.lang.Long id).
A aDTOToA(ADTO aDTO);
^
[ERROR] error on execute: error during compilation
Определение очень просто: For A:
{
"relationships": [
{
"relationshipId": 1,
"relationshipName": "b",
"otherEntityName": "b",
"relationshipType": "many-to-many",
"otherEntityField": "id",
"ownerSide": true
},
{
"relationshipId": 2,
"relationshipName": "user",
"otherEntityName": "user",
"relationshipType": "many-to-one",
"otherEntityField": "id"
}
],
"fields": [
{
"fieldId": 1,
"fieldName": "nameA",
"fieldType": "String"
}
],
"changelogDate": "20150909165353",
"dto": "mapstruct",
"pagination": "no"
}
Для B:
{
"relationships": [
{
"relationshipId": 1,
"relationshipName": "a",
"otherEntityName": "a",
"relationshipType": "many-to-many",
"ownerSide": false,
"otherEntityRelationshipName": "b"
},
{
"relationshipId": 2,
"relationshipName": "user",
"otherEntityName": "user",
"relationshipType": "many-to-one",
"otherEntityField": "id"
}
],
"fields": [
{
"fieldId": 1,
"fieldName": "nameB",
"fieldType": "String"
}
],
"changelogDate": "20150909165433",
"dto": "mapstruct",
"pagination": "no"
Я действительно застрял на этом. Любая помощь очень ценится !!
EDIT: Обеспечение GitHub репо, что демонстрирует проблему https://github.com/andyverbunt/jhipster-m2m.git
Почему у вас есть два способа отображения из идентификатора пользователя? В чем их отличие? – Gunnar
Привет, Gunnar, спасибо за отзыв. AFAIK, нет двух способов сопоставления идентификатора пользователю, по крайней мере, на том же объекте. Сущность A должна знать своего владельца, и то же самое касается B, но они разные объекты. Я отправлю пример на github и отредактировал сообщение, так что дружеская рука может взглянуть на него. –
Вы что-то изменили вручную? если не похоже на ошибку в том, что мы создаем с помощью mapstruct. когда mapstruct пытается сопоставить идентификатор пользователя с DTO с идентификатором в User, он видит два метода 'userFromId', выполняющий эту функцию, один в AMapper и другой в BMapper – Deepu