[Java Web]Hibernate基础总结(二)
2014-10-12 12:45
591 查看
Id生成策略
XML中通过在Id标签中加入Generator标签设置,例如:
Annotation中通过@GeneratedValue设定,例如:
联合主键配置方法
写一个POJO封装联合主键需要的属性,实现Serializable接口并重写equals方法和hashcode方法,将原类主键属性去除改为主键对象。XML配置:
不在主键类上加入@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缓存中的状态,特点是数据库中与缓存中都有该对象的数据
持久态:对象存入数据库后缓存消失的状态,特点是缓存中没有该对象但是数据库中已经保存了该对象的数据
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 @GeneratedValue public 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缓存中的状态,特点是数据库中与缓存中都有该对象的数据
持久态:对象存入数据库后缓存消失的状态,特点是缓存中没有该对象但是数据库中已经保存了该对象的数据
相关文章推荐
- [Java Web]Hibernate基础总结(一)
- [Java Web]Hibernate基础总结(四)
- [Java Web]Hibernate基础总结(四)
- [Java Web]Hibernate基础总结(三)
- java web B/s的简单实用基础总结(1)
- Java web基础总结十之—— jsp EL表达式
- SpringMVC_v02中的总结(web项目、java项目中引入Config.properties,加载hibernate映射文件的配置的区别)
- 【JavaWeb】基础知识总结05 jQuery
- Java web基础总结十之—— jsp EL表达式
- Java web基础总结三之—— java web 服务器
- Java web基础总结九之—— jsp标签
- 【JavaWeb】基础知识总结02 JSP
- 【JavaWeb】基础知识总结03 Servlet
- java web 开发中hibernate常见的基础问题
- javaWeb开发之基础--------------MySQL数据库总结
- Java web基础总结八之—— jsp基础
- [Java Web]Struts2基础总结(二)
- java web B/s的简单实用基础总结(2)
- [Java Web]Struts2基础总结(一)
- [Java Web]Struts2基础总结(三)