错误/异常:org.hibernate.id.IdentifierGenerationException: ids for this class must be manually assigned before calling save() 的解决方法
1、错误/异常图
错误/异常描述:id的生成错误,在调用save()方法之前,必须先生成id。
2、解决方法
在对应的实体类的主键(id)的get方法上加上:@GeneratedValue(strategy = GenerationType.AUTO) 这句话即可。括号中的值,根据你使用的数据库类型改。
自学SpringBoot遇到些问题,才有了这篇博客,里面可能有些错误,欢迎指教。
1、使用save方法进行数据更新
//实体类
@Entity
public class Student extends JpaRepositoriesAutoConfiguration{
private Integer id;
private String name;
private Integer age;
//省略getter/setter方法和构造函数
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
//Controller类
@RestController
public class HelloController {
@Autowired
private StuRepository stuRepository;
public void updateOne(@RequestParam("name") String name, @RequestParam("id") Integer id) {
Student student = new Student();
student.setName(name);
student.setId(id);
stuRepository.save(student);//实现数据更新
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
使用该save方法进行更新时会发现,更新全部字段时会正常实现,可是在只更新部分字段时,会发现没有更新的字段被置为null;
2、使用原生SQL方法实现数据更新
//省略实体类
- 1
//原生SQL实现更新方法接口
@Query(value = "update Studnet set name=?1 where id=?2 ", nativeQuery = true)
@Modifying
public void updateOne(String name,int id);
- 1
- 2
- 3
- 4
//在这个方法中调用上面的接口
@Transactional
public String updateOne(@RequestParam("name") String name, @RequestParam("id") Integer id) {
stuRepository.updateOne(name,id);
return "更新成功";
}
- 1
- 2
- 3
- 4
- 5
- 6
使用原生SQL方法来实现更新,就比较正常了,可以实现全部字段更新,同样可以实现部分字段更新。
这里是增删改查实例
http://download.csdn.net/download/sinat_33889619/10035078