我想创建一个与JHipster的用户实体具有多对一关系的实体。
我已经使用JDL-Studio创建了以下实体和与User的关系,使用jhipster import-jdl将其作为.jh文件导入到我的Microservice中:
entity Profile {
name String required
bio String
location String
photo ImageBlob
}
relationship ManyToOne {
Profile{user} to User
}
angularSuffix * with mySuffix
dto * with mapstruct
编译我的微服务后,我收到以下错误:
Profile.java:44:错误:找不到符号私有用户用户; symbol:class用户位置:class Profile
ProfileMapper.java:12:错误:找不到符号 @Mapper(componentModel =" spring",uses = {UserMapper.class,})symbol:class UserMapper
ProfileMapper.java:12:错误:无法检索@Mapper注释 @Mapper(componentModel =" spring",uses = {UserMapper.class,})
Profile.java的第43-44行是:
@ManyToOne
private User user;
和ProfileMapper.java如下:
package com.moogrisoft.openseas.service.mapper;
import com.moogrisoft.openseas.domain.*;
import com.moogrisoft.openseas.service.dto.ProfileDTO;
import org.mapstruct.*;
import java.util.List;
/**
* Mapper for the entity Profile and its DTO ProfileDTO.
*/
@Mapper(componentModel = "spring", uses = {UserMapper.class, })
public interface ProfileMapper {
@Mapping(source = "user.id", target = "userId")
ProfileDTO profileToProfileDTO(Profile profile);
List<ProfileDTO> profilesToProfileDTOs(List<Profile> profiles);
@Mapping(source = "userId", target = "user")
Profile profileDTOToProfile(ProfileDTO profileDTO);
List<Profile> profileDTOsToProfiles(List<ProfileDTO> profileDTOs);
/**
* generating the fromId for all mappers if the databaseType is sql, as the class has relationship to it might need it, instead of
* creating a new attribute to know if the entity has any relationship from some other entity
*
* @param id id of the entity
* @return the entity instance
*/
default Profile profileFromId(Long id) {
if (id == null) {
return null;
}
Profile profile = new Profile();
profile.setId(id);
return profile;
}
}
我的项目中没有UserMapper类,因为我是为我生成的。
如果我创建一个Monolithic应用程序然后创建实体关系工作正常,那么由于缺少User类和相关类,它只是微服务的一个问题。
答案 0 :(得分:5)
在JHipster微服务架构中,用户实体位于网关或UAA service上。
个人资料实体
在UAA中,您可以创建与用户有关系的实体。向实体添加配置文件等附加信息是一个很好的用例。也可以在网关中执行相同的操作。可以看到创建与用户有关系的实体的示例UAA https://github.com/xetys/microxchng-workshop/tree/master/uaa
博客实体
在微服务架构中使用实体子生成器的工作方式稍有不同,因为前端和后端代码不在同一个应用程序中。 https://jhipster.github.io/microservices-architecture/#generating_entities
对于这种类型的实体,我建议将用户ID与实体一起存储。您需要从客户端传递用户ID,因为无法从微服务轻松访问ID。我们使用用户ID而不是登录的原因是可以通过用户管理页面修改登录,导致关系失败(来自旧的登录值)。
另一种选择是使用userLogin,可以通过SecurityUtils.java在微服务中访问。只要您处理登录可以更改,这是另一种选择。