Hibernate核心配置*.hbm.xml详解

ゞ 浴缸里的玫瑰 2023-06-22 06:26 63阅读 0赞

Hibernate*.hbm.xml详解(常用的)

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <!DOCTYPE hibernate-mapping PUBLIC
  3. "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
  4. "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
  5. <hibernate-mapping>
  6. <!-- 建立类与表的映射 -->
  7. <class name="com.jjxy.hibernate.Customer" table="cst_customer">
  8. <!-- 建立类中的属性与表中的主键对应 -->
  9. <id name="cust_id" column="cust_id" >
  10. <!-- 主键的生成策略 -->
  11. <generator class="native"/>
  12. </id>
  13. <!-- 建立类中的普通的属性和表的字段的对应 -->
  14. <property name="cust_name" column="cust_name" length="32" />
  15. <property name="cust_source" column="cust_source" length="32"/>
  16. <property name="cust_industry" column="cust_industry"/>
  17. <property name="cust_level" column="cust_level"/>
  18. <property name="cust_phone" column="cust_phone"/>
  19. <property name="cust_mobile" column="cust_mobile"/>
  20. </class>
  21. </hibernate-mapping>

其中重要的元素有:

  1. DOCTYPE:hibernate-core-5.0.7.Final.jar 中的hibernate-mapping-3.0.dtd找到该声明
  2. hibernate-mapping






































属性名                 是否必须                                                                    说明
package 为映射文件的类指定一个包名。用于非全限定类名
schema  指定数据库的schema名
catalog 为数据库指定catalog名
default-cascade 指定默认的级联样式,默认为空

default-access

指定 Hibernate 的默认的属性访问策略。
default-lazy 指定Hibernate默认采用的延迟加载策略,默认为true
  1. classnametable






































属性名 是否必须 说明

name

指定该持久化类映射的持久化类的类名
table 指定该持久化类映射的表名,Hibernate 默认以持久化类的类名作为表名
mutable 指出持久化类的实例是否可变
catalog 为数据库指定catalog名,这里设置会覆盖hibernate-mapping的设置
lazy 指定是否使用延迟加载
rowid 指定是否可以使用ROWID
  1. id主键(nameclumngenerator




























属性名 是否必须  说明

name

标识持久化类 OID 的属性名
column 设置标识属性所映射的数据表的列名(主键字段的名字)
type

指定 Hibernate 映射类型。Hibernate 映射类型是 Java 类型与 SQL 类型的桥梁。如果没有为某个属性显式设定映射类型,Hibernate 会运用反射机制先识别出持久化类的特定属性的 Java 类型,然后自动使用与之对应的默认的 Hibernate 映射类型

unsaved-value 若设定了该属性,Hibernate 会通过比较持久化类的 OID 值和该属性值来区分当前持久化类的对象是否为临时对象

③.①主键生成策略


  1. assigned [转让主键生成权]

    主键由外部程序负责生成,无需Hibernate参与。

  2. hilo
    通过hi/lo 算法实现的主键生成机制,需要额外的数据库表保存主键生成历史状态。

  3. seqhilo
    与hilo 类似,通过hi/lo 算法实现的主键生成机制,只是主键历史状态保存在Sequence中,适用于支持Sequence的数据库,如Oracle。
  4. increment
    主键按数值顺序递增。此方式的实现机制为在当前应用实例中维持一个变量,以保存着当前的最大值,之后每次需要生成主键的时候
    将此值加1作为主键。
    这种方式可能产生的问题是:如果当前有多个实例访问同一个数据库,那么由于各个实例各自维护主键状态,不同实例可能生成同样的主键,从而造成主键重复异常。因此,如果同一数据库有多个实例访问,此方式必须避免使用。
  5. identity
    采用数据库提供的主键生成机制。如DB2、SQL Server、MySQL中的主键生成机制。
  6. sequence
    采用数据库提供的sequence 机制生成主键。如Oralce 中的Sequence。
  7. native
    由Hibernate根据底层数据库自行判断采用identity、hilo、sequence其中一种作为主键生成方式。
  8. uuid.hex
    由Hibernate基于128 位唯一值产生算法生成16 进制数值(编码后以长度32 的字符串表示)作为主键。
  9. uuid.string
    与uuid.hex 类似,只是生成的主键未进行编码(长度16)。在某些数据库中可能出现问题(如PostgreSQL)。
  10. foreign
    使用外部表的字段作为主键。一般而言,利用uuid.hex方式生成主键将提供最好的性能和数据库平台适应性。

作者:短发即正义
链接:https://www.jianshu.com/p/085811f9b15a
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。


④property(name、column、type、length)

属性类似于id,但是不同的是id作为主键

发表评论

表情:
评论列表 (有 0 条评论,63人围观)

还没有评论,来说两句吧...

相关阅读