如何在Spring Java中编辑Pojo?

时间:2019-05-06 01:26:30

标签: java spring jpa

我要编辑一个用户,是否应该用另一个用户替换它?还是应该只替换属性?

我有这个控制器

@PostMapping("/edit")
    public ResponseEntity<User> editUser(@RequestBody User user) {
        log.info("EDIT");
        return new ResponseEntity<User>(userServiceImpl.editUser(user), HttpStatus.OK);
    }

这是我的服务

public User editUser(User user) {
        User owner = userRepository.findById(user.getId());
        owner=user;

        userRepository.save(user);

        return owner;
    }

班级用户是

@Entity
@Table(name = "User")
public class User implements Serializable {

    private static final long serialVersionUID = -3009157732242241606L;
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private long id;

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

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

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

我需要做类似的事情,我是说要对bd执行插入查询吗?

@Modifying
@Query("update User u set u.firstname = ?1, u.lastname = ?2 where u.id = ?3")
void setUserInfoById(String firstname, String lastname, Integer userId);

3 个答案:

答案 0 :(得分:1)

只需保存更新的用户

public User editUser(User user) {
    return userRepository.save(user);
}

足够了。

答案 1 :(得分:1)

说明清楚。 让我们想想这简单。

  1. 您有userRepository.save(user); 它会做什么?

    • 如果该对象没有ID〜>将其另存为新对象
    • 如果该用户有一个ID,它将检查OVERWRITE,如果ID为EXIT 因此,如果您只想编辑某些字段,请按照惯例进行操作

    domain:port / user / {userId} /(PUSH),并在此处更改一些字段。 〜>获取数据库中的真实obj〜>更新对象并执行SAVE。 /〜>或者,您也可以直接进行查询更新

答案 2 :(得分:1)

在这里,这将确保没有数据丢失并且不会生成新记录。

public User editUser(User user) {
        User owner = userRepository.findById(user.getId());
        if(user.getName != null){
          owner.setName(user.getName);
        }
        if(user.getPassword != null){
          owner.setPassword(user.getPassword);
        }
        if(user.getEmail != null){
          owner.setEmail(user.getEmail);
        }
        return userRepository.save(owner);
    }