[Java Web]Hibernate基础总结(二)

来源:互联网 发布:淘宝开店认证要多久 编辑:程序博客网 时间:2024/05/16 14:10

Id生成策略

  1. 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>

  2. 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字段值(对应类名))//自定义表存放生成主键值


联合主键配置方法
  1. 写一个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即可。
  2. 不在主键类上加入@Embeddable,将主键对象设为@EmbeddedID
  3. 保留原类属性,在联合主键的每一条属性上都加上@Id,原类加上@IdClass(className.class)
openSession和getCurrentSession的区别
  1. openSession每次都会打开一个新Session,getCurrentSession会在上下文寻找Session,如果找不到则会打开一个新Session
  2. openSession使用完毕后需要close,getCurrentSession则不用
  3. getCurrentSession的上下文环境可以通过current_session_context_class设置,常用的是Thread(Connection)和jta(分布式)
Session的增删改查
  1. get和load:get检索不到对象时会返回空,load会报ObjectNotFoundException异常。get为即使加载,load为延时加载,在使用对象属性时才发出sql语句。
  2. update:查询的对象必须要有id,缓存中对象只要属性更改,在commit时会自动更新。更新时会更新所有字段,担心效率请用HQL。
  3. save和saveOrUpdate:save直接存储对象,saveOrUpdate会在存储对象前寻找该对象,如果找到了则更新该对象。
  4. clear:强制清除Session中的缓存
  5. flush:强制将数据库与缓存同步(默认在commit时使用)
三种对象状态
  1. 临时态:一般为刚刚创建的对象或者已经被delete的对象,特点是Session缓存中和数据库中都没有该对象的数据
  2. 游离态:将对象存入或取出到Session缓存中的状态,特点是数据库中与缓存中都有该对象的数据
  3. 持久态:对象存入数据库后缓存消失的状态,特点是缓存中没有该对象但是数据库中已经保存了该对象的数据

0 0
原创粉丝点击