Jhipster中的默认设置不是使用DTO,而是直接使用。
所以我的第一个实体company
不使用DTO。
现在我已经生成了一个与公司有多对一关系的实体tour
,以及服务层和DTO支持。
在生成过程中,我收到以下消息:
WARNING! This entity has the DTO option,
and it has a relationship with entity "company" that doesn't have the DTO option.
This will result in an error.
当我编译生成的项目时,我收到错误,如承诺:
java:11: error: cannot find symbol
@Mapper(componentModel = "spring", uses = {UserMapper.class, CompanyMapper.class})
我试图删除Annotation中的CompanyMapper.class,然后我收到以下行中的错误:
@Mapping(source = "companyId", target = "company")
Tour toEntity(TourDTO tourDTO);
Ambiguous mapping methods found for mapping property "java.lang.Long companyId" to java.lang.Object: de....Tour fromId(java.lang.Long id), de...User de.....mapper.UserMapper.userFromId(java.lang.Long id).
我是否需要建立公司DTO,还是有其他方式可以告诉mapstruct访问公司?
答案 0 :(得分:0)
我想我已经使用以下内容修复了Mapper:
首先,我删除了" CompanyMapper.class"来自@Mapper
注释,就像我在问题中描述的那样。
我向mapper添加了一个方法,用于从id创建公司。如果我理解正确,这可以使映射器调用" tour.setCompany()
"在创建Tour对象时,companyId
中有TourDTO
。
default Company companyFromId(Long id) {
if (id == null) {
return null;
}
Company obj = new Company();
obj.setId(id);
return obj;
}
答案 1 :(得分:0)
最初提出的this link是解决问题的一种方法。
另一种方法,不确定它是否是必需的,是直接从数据库中获取Company
(然后获得管理实体)。
如果您的CompanyRepository
方法findById(Long)
,那么您可以这样做。
@Mapper(componentModel = "spring", uses = {UserMapper.class,
CompanyRepository.class})
public interface MyMapper {
@Mapping(source = "companyId", target = "company")
Tour toEntity(TourDTO tourDTO);
}
详细说明了这一点