当前位置: 首页 > 知识库问答 >
问题:

如何在使用CRUD存储库的更新操作中防止空输入?

龙永逸
2023-03-14

对于CREATE操作,这是存储在数据库中的内容:-

[id=1, name=Ram, city=Delhi, email=abc@gmail.com, phone=12345]

但是,当我执行更新操作时,未更新的字段将变为null

[id=1, name=null, city=Mumbai, email=null, phone=56789]

现在,我的问题是如何防止名称和电子邮件变为空??

@Entity
public class User {

@Id
private Integer id;
private String name;
private String city;
private String email;
private String phone;

//Setters and Getters 
}
import org.springframework.data.repository.CrudRepository;
import com.therealdanvega.domain.User;

public interface UserRepository extends CrudRepository<User, Integer>{

}
    @SpringBootApplication
    public class JsontodbApplication implements CommandLineRunner {

    @Autowired
    private UserRepository userRepo;

    public static void main(String[] args) {
        SpringApplication.run(JsontodbApplication.class, args);
    }

    @Override
    public void run(String... args) throws Exception {

        /* CREATE USER */
        userRepo.save(createUser());

        /* UPDATE USER */
        userRepo.save(updateUser());

        System.out.println(userRepo.findOne(1));

    }

    public User createUser() {
        User user = new User();
        user.setId(1);
        user.setName("Ram");
        user.setCity("Delhi");
        user.setEmail("abc@gmail.com");
        user.setPhone("12345");
        return user;
    }

    public User updateUser() {
        User user = new User();
        user.setId(1);
        user.setCity("Mumbai");
        user.setPhone("56789");
        return user;
        }
    }

共有1个答案

傅自明
2023-03-14

您的代码并不像您认为的那样工作。对于Spring来说,实际上是这样的:

  1. 获取id=1,name=Ram...新对象用户,并将其放入基中。
  2. 获取id=1,city=Mumbai...的新对象用户,并将其放入该库中。

Spring存储库是这样工作的,如果您保存的对象具有NULL id,它将添加它。如果用给定的id保存对象,它将更新所有已更改的值。因此,对于spring,您实际上更新了每个字段,一些字段为新值,大多数字段为空值。更多信息

@SpringBootApplication
public class JsontodbApplication implements CommandLineRunner {

@Autowired
private UserRepository userRepo;

public static void main(String[] args) {
    SpringApplication.run(JsontodbApplication.class, args);
}

@Override
public void run(String... args) throws Exception {

    /* CREATE USER */
    User user = userRepo.save(createUser(new User()));

    /* UPDATE USER */
    userRepo.save(updateUser(user));

    System.out.println(userRepo.findOne(1));

}

public User createUser(User user) {
    user.setName("Ram");
    user.setCity("Delhi");
    user.setEmail("abc@gmail.com");
    user.setPhone("12345");
    return user;
}

public User updateUser(User user) {
    user.setCity("Mumbai");
    user.setPhone("56789");
    return user;
}
}
 类似资料:
  • 我有一个数据已经保存在我的数据库基于我的存储库和服务。我想保存另一个数据与邮递员只改变播放器id。但它不是创建一个新的实体数据。它更新现有的实体数据。我的问题是如何更新一个数据由我的服务当它找到一个现有的id。但当它找到一个新的id将保存一个新的数据到数据库。 这是我的回购: 这是我的服务:

  • 无论如何,如果用户名已经被使用,存储库只需进行更新,因为指定的标识符不是空的。这不是我想要的行为,我需要它抛出类似重复条目异常的东西。有什么办法可以预防吗?我必须自己做吗?例如:

  • 问题内容: 嗨,专家,我如何在SQL Server中锁定行,以防止CRUD操作(甚至是SELECT)。是否有可能?可序列化的隔离级别不会阻止SELECT。谢谢 问题答案: 这样就可以了。 编辑 正如其他人所指出的,您不能将行锁定为不被读取 。我知道这样做的唯一方法如下: 并假设在SELECT语句中从未使用过WITH(NOLOCK)(无论如何应避免使用)。 我测试了这一点,并且可以正常工作,尽管TA

  • 问题内容: 假设您已经在使用m2eclipse插件,当它没有将依赖关系更新到您的仓库中的最新版本时,您该怎么办? 例如,在命令行上,您只需添加如下标记即可 …强制更新依赖项。Eclipse中是否有类似的东西?(似乎并不总是能够获得最新更新。) 问题答案: 您可以 右键单击 项目,然后 右键单击 Maven >更新项目…,然后选择 强制更新快照/发布 复选框,然后单击确定。

  • 我正在尝试将输入验证添加到一组三个 ,用户在其中输入数值。我面临的问题是,为了使计算正常工作,用户无法输入零作为输入字段之一,否则应用程序将崩溃。 我尝试实现以下操作以防止输入零并显示警告消息。我收到一条错误消息,指出“无法启动活动calcResult”,这是显示计算的活动。 这是错误日志的链接:http://pastebin.com/hDsabjR6 我从这里了解到,零值仍然在通过验证,但我不知

  • 当我们在spring mvc中使用crud存储库时,会出现以下错误