java - 使用 GeneratedValue 作为主键的 Hibernate SaveOrUpdate

标签 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 一起使用? 谁能解释一下?

最佳答案

这是预期的,因为您正在运行该程序 2 次。

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

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

关于java - 使用 GeneratedValue 作为主键的 Hibernate SaveOrUpdate,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20464763/

相关文章:

mysql - 如何在 mysql 中限制每个用户的用户带宽、存储和访问

Mysql - 更换麻烦

java - hibernate @JoinTable 注释和标准无法正常工作

java - Hibernate 标准过滤器内部集合

java - 用Java处理html日期输入

java - 这个算法的大 O 复杂度是多少?

java - 确定当前光标的大小

php - 用php电子签名

mysql - 使用hibernate在查询MySQL数据库中排序

java - 我们可以调试没有main方法的Java程序吗?