jhipster DTO生成:我可以与非DTO实体有关系吗?

时间:2018-01-30 11:16:29

标签: java jhipster mapstruct

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访问公司?

2 个答案:

答案 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);
}

answer

详细说明了这一点