Java 使用主键的GeneratedValue休眠保存或更新

Java 使用主键的GeneratedValue休眠保存或更新,java,mysql,hibernate,Java,Mysql,Hibernate,我刚开始冬眠,我正在努力学习冬眠的细微差别。 我正在尝试使用hibernate保存或更新实体。 我的pojo课程:- @Entity @Table(name = "TestDB") public class TestCaseData { @Id @GeneratedValue(strategy=GenerationType.AUTO) private intid; @Column(columnDefinition="TEXT")

我刚开始冬眠,我正在努力学习冬眠的细微差别。 我正在尝试使用hibernate保存或更新实体。 我的pojo课程:-

    @Entity
    @Table(name = "TestDB")
    public class TestCaseData {

    @Id
    @GeneratedValue(strategy=GenerationType.AUTO)
    private intid;
    @Column(columnDefinition="TEXT")
    private String location;
    private String name;

    /*Getters and setters*/
主要类别:-

    public TestDbDao{
        public static void main(String args[]){
           TestCaseData d1 = new TestCaseData();
           TestCaseData d2 = new TestCaseData();
           TestCaseData d3 = new TestCaseData();

           d1.setHash("New York");
           d1.setName("Panache");
           saveOrUpdate(d1);
           /** d2 and d3 **/
    }
  }
I
saveOrUpdate
此实体。第一次运行主类时,表中创建了3行。 当我第二次运行相同的程序时,据我所知,当有saveOrUpdate时,如果表中不存在值,它应该保存,如果表中已存在的值被更新,它应该更新。但是我发现相同的3行被添加到具有不同ID的表中。 ID 1、2、3、4、5、6相同。为什么不保存或更新不能与generateValue id一起使用?
谁能解释一下吗?

这是意料之中的事,因为您正在运行该程序2次

每次程序运行时,Hibernate只看到您传入3个新实体(没有ID),因此您告诉Hibernate在DB中创建新记录


要查看saveAndUpdate()的效果,您可以在第二次将分离的实例传递给Hibernate,例如,ID为的
TestCaseData
实例对应于数据库中的现有记录,但名称不同。您应该能够看到Hibernate在数据库中更新相应的记录。

您有任何异常吗?没有,我没有任何异常。直接将相同的d1、d2和d3添加到表中,新ID为4、5、6,刚刚获得了另一个否决票。我很想知道原因:)