【问题标题】:How edit a pojo in spring java?如何在 Spring Java 中编辑 pojo?
【发布时间】:2019-05-06 01:26:30
【问题描述】:

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

我有这个控制器

@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);

【问题讨论】:

  • 请再看看jpa实体状态和java对象引用。
  • 首先为什么需要编辑实体?
  • @thanhngo 你应该多解释一下,我不明白你
  • @Deadpool 我需要编辑用户的性能
  • Entity 应该始终反映表格,并且根据您的需要更改它不是一个好主意@yaha

标签: java spring jpa


【解决方案1】:

说清楚。 想想就这么简单。

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

    • 如果此对象没有 Id ~> 将其保存为新对象
    • 如果这个用户有一个 ID,如果 id 是 EXIT,它会检查 OVERWRITE 因此,如果您只想编辑一些字段,请按照约定进行

    domain:port/user/{userId}/ (PUSH) 并在此处提供一些需要更改的字段。 ~> 在 DB 中获取真正的 obj ~> 更新对象并使用 SAVE。 / ~> 或者你可以根据需要直接进行查询更新

【讨论】:

    【解决方案2】:

    只需保存更新的用户

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

    这就够了。

    【讨论】:

    • 但这不会是一个新的创造?
    • @yaha,如果用户有 ID - 相应的用户将被更新。如果用户 ID == null - 将创建新记录。
    【解决方案3】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-01-20
      • 1970-01-01
      • 1970-01-01
      • 2023-03-20
      • 2022-11-03
      相关资源
      最近更新 更多