Java 用mysql休眠覆盖pk
嗯,我第一次使用Hibernate,出乎意料的是,它可以正常工作。除了一件事:已经插入pk的插入会覆盖阻止它的记录 这是我的简单代码:Java 用mysql休眠覆盖pk,java,mysql,spring,hibernate,Java,Mysql,Spring,Hibernate,嗯,我第一次使用Hibernate,出乎意料的是,它可以正常工作。除了一件事:已经插入pk的插入会覆盖阻止它的记录 这是我的简单代码: @Controller public class SimpleController { @Autowired UserRepository userRepository; @GetMapping("/mainPage") public String viewMainPage(){ return "mainPag
@Controller
public class SimpleController {
@Autowired
UserRepository userRepository;
@GetMapping("/mainPage")
public String viewMainPage(){
return "mainPage";
}
@GetMapping("/nuovo-utente")
public String viewInserisciUtente(Model model){
model.addAttribute("nuovoUtente", new Utente());
return "nuovo-utente";
}
@PostMapping("/nuovo-utente")
public String memorizzaUtente(@ModelAttribute Utente utente){
userRepository.save(utente);
return "output";
}
}
@Entity
public class Utente {
@Id
private int id;
private String citta=null;
private String genere=null;
private String data_nascita=null;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getCitta() {
return citta;
}
public void setCitta(String citta) {
this.citta = citta;
}
public String getGenere() {
return genere;
}
public void setGenere(String genere) {
this.genere = genere;
}
public String getData_nascita() {
return data_nascita;
}
public void setData_nascita(String data_nascita) {
this.data_nascita = data_nascita;
}
}
任何帮助都将不胜感激
编辑:我添加了实体类来帮助您理解我的问题。希望这会有所帮助
谢谢大家如果您查看文档,那么我们没有更新方法,但只有保存方法,用于添加或更新现有记录
在您的情况下,您可能已经更新了一个实体(其Id字段除外)并尝试保存该实体。因此,crudepository将更新给定Id的现有值,因为它已经存在。尝试将Id生成策略添加到
Id
字段
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private int id;
UserRepository中的保存方法是什么?UserRepository是一个粗糙的存储接口。这是他的方法。这是代码:public interface UserRepository extends crudepository{}@Pikappa您能显示实体类吗?当然,就是这样:我刚刚编辑了我的post,那么我应该使用instaed做什么呢?@Pikappa如果您想向表中添加新行。然后,更改Id值,它将添加新行。是的,当然,但我想完全防止覆盖。如果我插入一个已经插入的Id(比如在workbench上插入一个简单的Id)会出现错误@Pikappa那么,为什么不先使用findById,然后查看它是否已经存在?