如何向User(jhi_user)实体Jhipster添加字段?

时间:2017-04-18 11:55:13

标签: jhipster

我想向description实体添加新字段User。我不能使用yo jhipster:entity User,因为它是被禁止的。那么,我必须做什么?

2 个答案:

答案 0 :(得分:1)

如果我们需要存储有关用户的更多信息而不是JHipster默认提供的信息,则需要进行一些调整。

为了说明这一点,我们假设我们要存储用户的电话号码。

使用JHI_User以一对一的关系创建新实体 添加未由默认JHipster用户处理的信息的最佳方法是使用与其链接的新实体中的组合与一对一关系。

创建此实体后,让我们将其称为UserExtra,处理其id的最佳方法是将其映射到JHI_User的id。这样,我们的UserExtra将具有与用户相同的ID,从而加速不同的请求。为此,您需要使用@MapsId注释:

public class UserExtra implements Serializable {

    private static final long serialVersionUID = 1L;

    @Id
    private Long id;

    @Column(name = "phone")
    private String phone;

    @OneToOne
    @MapsId
    private User user;
    ...

}

请注意,需要删除id上的@GeneratedValue注释。

更新注册HTML页面以考虑此更改 现在存在一个存储电话号码的实体,我们需要在注册表中添加一个输入来询问用户的电话号码。

没有比这更容易的了,只需更新webapp / app / account / register / register.html以添加绑定到已用于存储基本信息的变量的输入字段(vm.registerAccount):

<input class="form-control" id="phone" ng-model="vm.registerAccount.phone" placeholder="global.form.phone.placeholder" />

更新ManagedUserVM java / com.mycompany.myapp / web / rest / AccountResource中的registerAccount()函数是从注册页面接收请求的函数。它唯一的参数是一个ManagedUserVM对象,其中包含最初包含在客户端的vm.registerAccount变量中的信息。

还必须更新位于web / rest / vm中的此ManagedUserVM类,以便它保存客户端发送的电话号码。这里唯一要做的就是添加电话号码属性及其getter:

public class ManagedUserVM extends UserDTO {

    // Default attributes omitted for brevity

    private String phone;

    ...

    public String getPhone() {
        return phone;
    }

}

从AccountResource更新registerAccount()函数 registerAccount()函数现在接收一个ManagedUserVM对象,该对象还包含用户的电话号码。唯一要做的就是将这个电话号码保存到与JHipster用户关联的新UserExtra中。

为此,我们将把phone参数添加到UserService的createUser()函数中。但首先,在registerAccount()中调用此函数时添加此参数:

public ResponseEntity<?> registerAccount(@Valid @RequestBody ManagedUserVM managedUserVM) {

    HttpHeaders textPlainHeaders = new HttpHeaders();
    textPlainHeaders.setContentType(MediaType.TEXT_PLAIN);

    return userRepository.findOneByLogin(managedUserVM.getLogin().toLowerCase())
        .map(user -> new ResponseEntity<>("login already in use", textPlainHeaders, HttpStatus.BAD_REQUEST))
        .orElseGet(() -> userRepository.findOneByEmail(managedUserVM.getEmail())
            .map(user -> new ResponseEntity<>("e-mail address already in use", textPlainHeaders, HttpStatus.BAD_REQUEST))
            .orElseGet(() -> {
                User user = userService
                    .createUser(managedUserVM.getLogin(), managedUserVM.getPassword(),
                        managedUserVM.getFirstName(), managedUserVM.getLastName(),
                        managedUserVM.getEmail().toLowerCase(), managedUserVM.getLangKey(),
                        managedUserVM.getPhone());

                mailService.sendActivationEmail(user);
                return new ResponseEntity<>(HttpStatus.CREATED);
            })
    );
}

从UserService更新createUser()函数 最后,我们更新了保存JHI_User的服务层功能,现在也保存了UserExtra。我建议您使用附加参数创建一个新函数,而不是更新现有函数。这样就不需要更新测试类了。

不要忘记注入UserExtra存储库:

@Inject
private UserExtraRepository userExtraRepository;

@Inject
private UserExtraSearchRepository userExtraSearchRepository;

...

public User createUser(String login, String password, String firstName, String lastName, String email,
                           String langKey, String phone) {

    User newUser = new User();
    Authority authority = authorityRepository.findOne(AuthoritiesConstants.USER);
    Set<Authority> authorities = new HashSet<>();
    String encryptedPassword = passwordEncoder.encode(password);
    newUser.setLogin(login);
    // new user gets initially a generated password
    newUser.setPassword(encryptedPassword);
    newUser.setFirstName(firstName);
    newUser.setLastName(lastName);
    newUser.setEmail(email);
    newUser.setLangKey(langKey);
    // new user is not active
    newUser.setActivated(false);
    // new user gets registration key
    newUser.setActivationKey(RandomUtil.generateActivationKey());
    authorities.add(authority);
    newUser.setAuthorities(authorities);
    userRepository.save(newUser);
    userSearchRepository.save(newUser);
    log.debug("Created Information for User: {}", newUser);

    // Create and save the UserExtra entity
    UserExtra newUserExtra = new UserExtra();
    newUserExtra.setUser(newUser);
    newUserExtra.setPhone(phone);
    userExtraRepository.save(newUserExtra);
    userExtraSearchRepository.save(newUserExtra);
    log.debug("Created Information for UserExtra: {}", newUserExtra);

    return newUser;
}

https://jhipster.github.io/tips/022_tip_registering_user_with_additional_information.html

答案 1 :(得分:0)

  1. 将列添加到实体User.java

    @Column(name = "description")
    private String description;
    

    修改方法toString()

  2. UserDTO.java添加:

    private String description;
    
  3. 生成getter和修改方法toString()

    1. 添加液基差异或添加色谱柱。
    2. 现在是时候修改一些webapp文件夹了。

      1. 文件user-managment.state.js找到州user-managment.newentity: function ()新回复,description: null

      2. 如果要添加此字段以显示查找和修改文件:

        user-managment.html

        user-managment-detail.html

        user-managment-dialog.html

      3. 例如:<th><span data-translate="some.some.user.description">Description</span></th>