使用GeneratedValue为主键休眠SaveOrUpdate

时间:2013-12-09 06:49:24

标签: java mysql hibernate

我是Hibernate的新手,我正在努力学习它的细微差别。 我正在尝试使用hibernate saveOrUpdate实体。 我的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 **/
    }
  }

saveOrUpdate这个实体。我第一次运行主类时,在表中创建了3行。 当我第二次运行相同的程序时,根据我的知识,当存在saveOrUpdate时,它应该保存,如果表中不存在该值,或者如果表中已更新已存在的值则更新。但我找到相同的3使用不同的ID将行添加到表中。 ids 1,2,3,4,5,6是相同的。为什么saveOrUpdate不能与generateValue id一起使用? 有人可以解释一下吗?

1 个答案:

答案 0 :(得分:-3)

预计,因为您正在运行该程序2次。

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

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