[Java Web]Hibernate基础总结(二)
来源:互联网 发布:淘宝开店认证要多久 编辑:程序博客网 时间:2024/05/16 14:10
Id生成策略
- XML中通过在Id标签中加入Generator标签设置,例如:
<id name="id"> <!-- 主键生成机制(除以下四种很少使用) identity 采用数据库生成机制(MySQL、SQL Server、DB2) sequence 采用数据库生成机制(Oracle),Oracle中默认生成hibernate_sequence序列 native 根据数据库方言选择identity或sequence,最为常用 uuid 由Hibernate自动生成,可以跨数据库使用 --> <generator class="native"/> </id>
- Annotation中通过@GeneratedValue设定,例如:
@Id@GeneratedValuepublic int getId() {return id;}
GenerrateValue有两个属性:strategy用于设置自动生成策略,他的可选属性有:@Id@GeneratedValue//默认为AUTO MySQL下使用auto_increment,Oracle下使用hibernate_sequence序列@GeneratedValue(strategy=GenerationType.IDENTITY)//MySQL、SQL Server等数据库使用@GeneratedValue(strategy=GenerationType.SEQUENCE, generator="id_seq")@SequenceGenerator(name="id_seq",//与generator对应<span style="white-space:pre"></span>sequenceName="id_sequence"//指定生成序列名<span style="white-space:pre"></span>)//Oracle中使用@GeneratedValue(strategy=GenerationType.TABLE, generator="id_table")@TableGenerator(name="id_table",//与generator对应table="db_table",//指定生成表名pkColumnName="id_key",//指定表key字段名valueColumnName="id_value",//指定表value字段名pkColumnValue="class_name"//指定表key字段值(对应类名))//自定义表存放生成主键值
联合主键配置方法
- 写一个POJO封装联合主键需要的属性,实现Serializable接口并重写equals方法和hashcode方法,将原类主键属性去除改为主键对象。XML配置:
<hibernate-mapping> <class name="com.bjsxt.pojo.Student" > <composite-id name="studentPK" class="com.bjsxt.pojo.StudentPK"> <key-property name="id"></key-property><key-property name="name"></key-property></composite-id> <property name="age" /><property name="sex" /> <property name="good" type="yes_no" /> </class> </hibernate-mapping>
Annotation只需要在主键类上加上@Embeddable,将主键对象设为@Id即可。 - 不在主键类上加入@Embeddable,将主键对象设为@EmbeddedID
- 保留原类属性,在联合主键的每一条属性上都加上@Id,原类加上@IdClass(className.class)
openSession和getCurrentSession的区别
- openSession每次都会打开一个新Session,getCurrentSession会在上下文寻找Session,如果找不到则会打开一个新Session
- openSession使用完毕后需要close,getCurrentSession则不用
- getCurrentSession的上下文环境可以通过current_session_context_class设置,常用的是Thread(Connection)和jta(分布式)
Session的增删改查
- get和load:get检索不到对象时会返回空,load会报ObjectNotFoundException异常。get为即使加载,load为延时加载,在使用对象属性时才发出sql语句。
- update:查询的对象必须要有id,缓存中对象只要属性更改,在commit时会自动更新。更新时会更新所有字段,担心效率请用HQL。
- save和saveOrUpdate:save直接存储对象,saveOrUpdate会在存储对象前寻找该对象,如果找到了则更新该对象。
- clear:强制清除Session中的缓存
- flush:强制将数据库与缓存同步(默认在commit时使用)
三种对象状态
- 临时态:一般为刚刚创建的对象或者已经被delete的对象,特点是Session缓存中和数据库中都没有该对象的数据
- 游离态:将对象存入或取出到Session缓存中的状态,特点是数据库中与缓存中都有该对象的数据
- 持久态:对象存入数据库后缓存消失的状态,特点是缓存中没有该对象但是数据库中已经保存了该对象的数据
0 0
- [Java Web]Hibernate基础总结(二)
- [Java Web]Hibernate基础总结(一)
- [Java Web]Hibernate基础总结(三)
- [Java Web]Hibernate基础总结(四)
- [Java Web]Struts2基础总结(二)
- Java web基础总结二之—— http协议
- java基础总结二
- java 基础总结(二)
- JAVA基础总结(二)
- Java基础总结(二)
- Java基础总结二
- java web基础大总结
- Java入门基础总结(二)
- Java基础知识点总结二
- java基础总结(二)
- java基础总结(二)
- Hibernate基础之给java web工程加入Hibernate支持
- Java Web基础学习(二)
- x4412开发板&ibox卡片电脑项目实战16-将hello x4412驱动编译成模块
- 命题真值判断代码
- C++中引用和指针的区别
- 留学垃圾--葡桃
- poj3667 (线段树区间合并)
- [Java Web]Hibernate基础总结(二)
- gcc学习(一)[第二版]
- Linux文件系统十问,你知道吗?
- Android] ImageView.ScaleType设置图解
- 只会CSS还不够,LESS、SASS、BootStrap、Foundation一网打尽!
- Linux 下rm+grep删除除去指定文件的剩余所有文件
- void指针
- XMPP协议的原理介绍
- 分治排序(2)