我是 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/