我是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一起使用?
有人可以解释一下吗?
答案 0 :(得分:-3)
预计,因为您正在运行该程序2次。
每次程序运行时,Hibernate只会看到你传入3个新实体(没有ID),因此你告诉Hibernate在DB中创建新记录。
要查看saveAndUpdate()的效果,您可以在第二次将分离的实例传递给Hibernate,例如具有ID的TestCaseData
实例对应于DB中的现有记录,但具有不同的name
。您应该能够看到Hibernate更新DB中的相应记录。