关闭

hibernate的saveOrUpdate方法

标签: hibernate数据库classtable
7705人阅读 评论(0) 收藏 举报
分类:

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 操作,自动生成主键,成功插入该数据进入数据库。


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

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


0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:111630次
    • 积分:899
    • 等级:
    • 排名:千里之外
    • 原创:5篇
    • 转载:14篇
    • 译文:0篇
    • 评论:50条
    文章分类
    最新评论