hibernate的saveOrUpdate方法

saveOrUpdate()方法到底怎么执行的?(原来和主键生成方式还有关系)

答:

该方法在执行过程中,需要一个对象作为参数。

如果主键生成方式为 手动设置:assigned:

1)如果该对象存在 标识属性 ,(通俗点就是对应数据库中主键列的属性,如student的id属性,class的id属性,各种类的id属性):

 执行select * from table_name where id = ?  

若可以查到数据,则执行update操作,update tablename set proterty1 = param1 and proterty2 = param2 where id = ?;

如果查不到数据,则执行save操作。

2)如果该对象不存在标识属性:

hibernate报错,意思是没有指示主键是多少,hibernate不知道怎么往数据库插入。

如果主键生成方式为 自动生成:identity:

1)如果该对象存在 标识属性 ,(通俗点就是对应数据库中主键列的属性,如student的id属性,class的id属性,各种类的id属性):

 执行update操作 update tablename set proterty1 = param1 and proterty2 = param2 where id = ?:

若数据库表中有匹配该id的数据,修改成功。

若数据库表中没有匹配该id的数据,hibernate报错。

2)如果该对象不存在标识属性:

hibernate直接执行save 操作,自动生成主键,成功插入该数据进入数据库。


--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

其他主键生成方式没有试验,欢迎指正。


你可能感兴趣的:(java,hibernate,saveOrUpdate)