Hibernate的hbm.xml映射文件配置教程

1次阅读

.hbm.xml文件仍用于老项目维护等场景,核心是类表、属性字段准确映射,含id主键配置(native/identity/sequence等)、关联映射(set+one-to-many与many-to-one配合inverse)、集合(list/map)及组件(component)声明。

Hibernate的hbm.xml映射文件配置教程

hibernate.hbm.xml 映射文件虽已逐渐被注解和 JPA 方式取代,但在维护老项目、需要高度灵活映射或统一管理 sql 逻辑时仍有实用价值。配置关键在于类与表、属性与字段的准确对应,以及主键、关联、集合等结构的正确声明。

基础结构:一个最简 hbm.xml 文件

每个映射文件对应一个实体类,根元素为 <hibernate-mapping></hibernate-mapping>,内部用 <class></class> 声明映射关系:


br>   “-//Hibernate/Hibernate Mapping DTD 3.0//EN”
  “http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd”>

  
    
      
    

            

注意:
package 属性可省略,但建议设置,避免写全限定类名
name 是类名(非全路径,因有 package)
column 默认与 name 同名,可省略;显式写出更清晰
type 可省略,Hibernate 会按属性类型自动推断(如 String → varchar)

主键配置:id 和 generator 的常见组合

<id></id> 必须定义,其子元素 <generator></generator> 指定主键生成策略:

  • native:根据方言自动选 identity / sequence / hilo(推荐用于跨数据库
  • identity:依赖数据库自增(mysql、SQL Server 支持)
  • sequence:使用数据库序列(oraclepostgresql 推荐),需加 <param name="sequence">seq_user_id
  • uuid:生成 32 位字符串 UUID,无需数据库支持
  • assigned:由程序手动赋值(如业务编码),此时需去掉 <generator></generator>

关联映射:一对多、多对一怎么写

以“用户(User)→ 订单(Order)”为例,User 有一组订单,Order 属于一个 User:

User.hbm.xml 中添加:


  
  

Order.hbm.xml 中添加:

说明:
cascade 控制级联操作(如保存 User 时是否自动保存 orders)
inverse="true" 表示本端不负责维护外键(由 Order 的 many-to-one 端控制),避免重复更新
not-NULL="true" 对应数据库字段非空约束,也影响插入校验

集合映射与组件:list、map、component 怎么用

当属性是集合或嵌入对象时,用对应标签:

  • :按索引顺序存储,需配 <list-index column="idx"></list-index>

  • :键值对,用 <map-key column="key_col" type="string"></map-key> 定义键

  • :映射值对象(如 Address),不单独建表,字段直接落在主表中

例如 User 有一个嵌入的 Address:


     

基本上就这些。hbm.xml 配置不复杂但容易忽略细节,比如 DTD 路径写错、column 名大小写不一致、inverse 设置反了导致外键为空——调试时优先检查这些地方。

text=ZqhQzanResources