您的位置:首页 > 其它

Hibernate配置总结

2015-10-09 22:01 267 查看
Hibernate.cfg.xml主配置文件配置:

1、配置数据库的信息:包括数据库方言、数据库URL、数据库驱动、用户名、密码

<property name="dialect">org.hibernate.dialect.Oracle10gDialect</property>
<property name="connection.url">
jdbc:oracle:thin:@localhost:1521:orcl
</property>
<property name="connection.driver_class">
oracle.jdbc.driver.OracleDriver
</property>
<property name="connection.username">xxx</property>
<property name="connection.password">xxx123</property>
2、其他配置:

      (1)是否显示SQL语句:

                其中"show_sql"为true表示显示SQL语句,为false表示不显示SQL语句,"format_sql"为true表示格式化显示的SQL语句,为         false表示不格式化显示的SQL语句。

<property name="show_sql">true</property>
<property name="format_sql">true</property>
      (2)配置是否自动建表:

                其中可选的值有:

                      a、create:先删除,再创建    

                      b、update:如果表不存在就创建,不一样就更新,一样就什么都不做

                      c、create-drop:初始化时创建表,SessionFactory执行close()时删除表

                      d、validate:验证表结构是否一致,如果不一致,就抛异常

<property name="hbm2ddl.auto">update</property>
      (3)配置事务隔离级别:

                1表示读操作未提交,2表示读操作已提交,4表示可重复读,8表示可串行化

<property name="connection.isolation">2</property>
      (4)数据库连接池配置(c3p0):

<!-- 使用c3p0连接池 配置连接池提供的供应商 -->
<property name="connection.provider_class">
org.hibernate.connection.C3P0ConnectionProvider
</property>
<!-- 在连接池中可用的数据库连接最少数目 -->
<property name="hibernate.c3p0.min_size">5</property>
<!-- 在连接池中所有数据库连接的最大数目 -->
<property name="hibernate.c3p0.max_size">20</property>
<!-- 设定数据库连接的过期时间,以秒为单位,
如果连接池中的某个数据库连接处于空闲状态超过了timeout时间,就会从连接池中清除
-->
<property name="hibernate.c3p0.timeout">120</property>
<!-- 每3000秒检查所有连接池中的空闲连接,以秒为单位 -->
<property name="hibernate.c3p0.idle_test_period">3000</property>
      (5)二级缓存配置:

                二级缓存默认是未打开的,所以要使用二级缓存,就要如下配置。第2-4行配置的是缓存的提供商,如果要使用更高级的缓存提供商,那么可以查阅Hibernate文档,并导入相应的包。第7行配置的是查询缓存的开关,表示当使用hql语句进行查询的时候,是否将查询结果保存到二级缓存中。第10-11行配置的是指定要使用二级缓存的实体类,"read-only"表示只读,如果既要读也要写的话,可以使用"read-write"。第14行配置的是集合缓存,表示当通过一个对象中的集合属性找到另一个与之关联的对象是,也要保存到二级缓存。

<!-- 指定要使用的缓存的提供商,这也就打开了二级缓存 -->
<property name="cache.provider_class">
org.hibernate.cache.HashtableCacheProvider
</property>

<!-- 查询缓存开关,true开启使用查询缓存-->
<property name="cache.use_query_cache">true</property>

<!-- 指定要使用二级缓存的实体类 -->
<class-cache usage="read-only" class="edu.fjnu.l_hbm_second_cache.Department"/>
<class-cache usage="read-only" class="edu.fjnu.l_hbm_second_cache.Employee"/>

<!-- 集合缓存 -->
<collection-cache usage="read-only" collection="edu.fjnu.l_hbm_second_cache.Department.employees"/>
      (6)导入映射文件:把所有实体类对应的*.hbm.xml文件都导入到主配置文件中,注意映射文件地址的书写方式

<mapping resource="edu/fjnu/domain/User.hbm.xml"/>


关联关系映射文件配置:
1、一对多:

     name表示该实体类中关联其他表的那个属性名称;table表示关联的表名称;inverse属性默认为false表示本方维护关联关系,如果为true表示本方不维护关联关系。只是影响是否能设置外键列的值(设成有效值或是null值),对获取信息没有影响。cascade属性默认为none,表示不级联,可设置为:delete,save-update,all,none 。key元素中column表示本类关联的那个表中的外键列。one-to-many
中的class表示本类关联那个实体的类型,即类名。

<set name="" table="" inverse="" cascade="">
<key column=""></key>
<one-to-many class=""/>
</set>


2、多对一:

      name属性表示本类存在的关联的变量名;class属性表示关联的实体类型;column属性表示外键列,引用了关联对象的表的主键。

<many-to-one name="" class="" column=""></many-to-one>


3、多对多:

      table属性表示中间表,填写表名;key子元素中的column表示集合外键,引用当前表主键的那个外键;many-to-many中的class表示关联的那个实体的类型,即类名,column表示中间表引用关联表的的主键。

<set name="" table="">
<key column=""></key>
<many-to-many class="" column=""></many-to-many>
</set>


4、一对一(采用独立外键):

有外键方:与多对已关系一致,加上unique="true"表示外键唯一性。

<many-to-one name="" class="" column="" unique="true"></many-to-one>
无外键方:property-ref属性,写的是对方映射中外键列对应的类属性名。

<one-to-one name="" class="" property-ref=""></one-to-one>
5、一对一(一方主键作为外键):

有外键方:主键生成策略一定为foreign,参数property生成主键值时所根据的对象。constrained属性设置为true

<id name="id" type="java.lang.Integer" column="id">
<generator class="foreign">
<param name="property"></param>
</generator>
</id>

<one-to-one ="" class="" constrained="true"></one-to-one>

无外键方:name表示本类中有关联关系的属性,class表示关联关系的类型

<one-to-one name="" class=""></one-to-one>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  hibernate配置