博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Hibernate unsaved-value 属性
阅读量:6743 次
发布时间:2019-06-25

本文共 854 字,大约阅读时间需要 2 分钟。

Session的saveOrUpdate方法是由来判断被操作对象究竟是一个持久化对象还是临时自由状态对象。这需要在对象映射文件的主键id中定义unsaved-value属性,如果不显式定义,则默认为unsaved-value=null。 

unsaved-value可以是下列几个选项: 
1)null:主键是对象类型,Hibernate判断操作对象的主键是否为null,来判断操作对象是否以被持久化,如果是,调用save方法,生成insert语句,在中增加一条记录,如果不是,设置主键则直接生成update的SQL语句,发送update,如果数据库中没有那条记录则抛出异常。 
2)none:由于不论主键属性为任何值,都不可能为none,因此Hibernate总是对被操作对象发送update。 
3)any:由于不论主键属性为任何值,都肯定为any,因此Hibernate总是对被操作对象发送save,Hibernate生成主键。 
显式的使用session.save()或者session.update操作一个对象时,实际上市用不到unsaved-value的。 
在一个session中,持久化对象的变化,不需要调用update等显式语句,由flush方法就可以实现数据库表的更新。 
不同session之间的对象,也就是游离状态的对象,必须使用update显式更新数据库表。 
修改一个对象,最好的方法是使用session的load方法进行持久化,然后使用set方法实现属性的修改,一般情况下,不要使用setId方法来修改对象的主键值,避免产生意想不到的错误。 
使用Hibernate的id generator来生成无业务意义的主键,不使用有业务含义的字段作主键,不建议使用assigned。 
使用对象类型(String/Integer/Long/...)来做主键,而不使用基础类型(int/long/...)做主键

转载于:https://www.cnblogs.com/Syria/p/6363628.html

你可能感兴趣的文章
Spring整合Web开发
查看>>
python写的的语音天气预报
查看>>
cesium加载shp格式数据
查看>>
博客已搬家,新博地址 http://www.yiven.vip
查看>>
在SContruct中编译.c
查看>>
菜鸟Scrum敏捷实践系列(三)用户故事的组织---功能架构的规划
查看>>
让ubuntu开启ssh服务以及让vi/vim正常使用方向键与退格键
查看>>
hdu1325 并查集
查看>>
简易时间序列分析的方法总结(R实现)
查看>>
JAVA web简单的登录界面jsp实现
查看>>
10.两个链表的交叉
查看>>
dynamic 是什么
查看>>
学习日记0829 IP协议 子网掩码 端口TCP协议的三次握手 四次挥手 套接字socket
查看>>
jQuery中json对象与json字符串互换
查看>>
微服务时代之2017年五军之战:Net PHP谁先死
查看>>
C# Task的使用---Task的启动
查看>>
查询sql limit用法,望大神指教
查看>>
十四、MySQL UPDATE 查询
查看>>
CentOS系统通过PXE实现批量无人值守安装
查看>>
Java线程--interrupt join yield setDaemon常用方法的使用
查看>>