mysql休眠模式会覆盖pk

时间:2018-09-22 13:57:50

标签: java mysql spring hibernate

好吧,我是第一次使用Hibernate,但出乎意料的是,它可以工作。除了一件事:一个已经插入pk的插入将覆盖防止该插入的记录。

那是我的简单代码:

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

任何帮助将不胜感激。

编辑:我添加了实体类来帮助您理解我的问题。希望这会有所帮助。

谢谢大家

2 个答案:

答案 0 :(得分:2)

如果您查看CrudRepository文档,那么我们没有更新方法,而只有保存方法,用于添加或更新现有记录。

在您的情况下,您可能已经更新了实体(其“ Id”字段除外)并尝试保存该实体。因此,CrudRepository将为给定ID更新现有值,因为它已经存在。

答案 1 :(得分:1)

尝试将ID生成策略添加到id字段。

@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private int id;