Java 使用主键的GeneratedValue休眠保存或更新
我刚开始冬眠,我正在努力学习冬眠的细微差别。 我正在尝试使用hibernate保存或更新实体。 我的pojo课程:-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")
@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 **/
}
}
IsaveOrUpdate
此实体。第一次运行主类时,表中创建了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,刚刚获得了另一个否决票。我很想知道原因:)