Hibernate ORM

一对一
注解配置方式
对主表外键对象的get方法添加注解
@OneToOne(cascade=CascadeType.ALL)
@JoinColumn(name="字段名", unique=true)


JoinColumn.name 外键字段名
JoinColumn.unique 是否唯一


保存时,先保存子表,再保存主表


xml配置方式
<many-to-one name="子表类属性名" column="外键数据字段名" unique="true" />


---------------------------------------
一对一双向关联
注解配置方式
一方get方法必须添加
@OneToOne(mappedBy="另一个表关联自己的属性名")
将控制权交给另一方,不能双方都设置外键保存关联关系,否则都无法保存


xml配置方式
被控方添加
<one-to-one name="关联类属性名" property-ref="关联类关联自己的对象属性名" />


-----------------------------------------
一对一联合主键关联
注解配置方式
生成主键类,在类名前配置注解@Embeddable
主键类必须实现serializable接口,重写hashCode()和equals()方法
实体类在复合主键的get方法前添加注解@EmbeddedId
复合主键类需要添加到cfg.xml配置文件中


主控类外键关联写法
@JoinColumns({
    @JoinColumn(name="对象属性名", referencedColumnName="数据库字段名"),
    @JoinColumn(name="对象属性名", referencedColumnName="数据库字段名")
})


xml配置方式
被控类
<composite-id name="pk" class="包...复合主键类">
  <key-property name="类属性名" column="数据库字段名" type="java数据类型(int,float,double,string...)" />
  <key-property name="类属性名" column="数据库字段名" type="java数据类型" />
  <generator class="assigned"></generator>
</composite-id>


主控类
<many-to-one name="子表类属性名">
  <column name="属性名" unique="true" />
  <column name="属性名" />
</many-to-one>


-----------------------------------------
一对一组件关联
注解配置方式
主表实体类在子表事体对象get方法前添加注解@Embeddable
子表实体类无需任何配置,生成的表为含有两表所有字段的主表


注解配置方式
<component name="子表属性名" class="包...子表类名">
  <property name="属性名" column="数据库字段名" type="java数据类型"></property>
  <property name="属性名" column="数据库字段名" type="java数据类型"></property>
</component>


-----------------------------------------
多对一单向外键
注解配置方式
@ManyToOne(cascade={CascadeType.All}, fetch=FetchType.EAGER)
@JoinColumn(name="外键字段名")


xml配置方式
<many-to-one name="类属性名" cloumn="数据字段名"  />


-----------------------------------------
一对多单向关联
主表实体类用Set集合关联子表实体类


注解配置方式
@OneToMany(cascade={CascadeType.ALL}, fetch=FetchType.LAZY)
@JoinColumn(name="属性名", column="字段名")


xml配置方式
<set name="子表set集合属性名">
  <key column="外键字段名"></key>
  <one-to-many class="包...子表类名" />
</set>


懒加载:主表查询SQL先查询读取出来,子表用到多少查询读取多少


-------------------------------------------
一对多,多对一双向关联
将上述配置结合便可




-------------------------------------------
多对多
注解配置方式
@ManyToMany(cascade=CascadeType.ALL)
@JoinTable(name="定义中间关联表表名", 
    joinColumn={@JoinColumn(name="主表主键属性名")},
    inverseJoinColumn={@JoinColumn(name="子表主键属性名")}
)


xml配置方式
<set name="set属性名" table="中间关联表表名" cascade="all">
  <key column="主表主键属性名"></key>
  <many-to-many class="包...子表类名" column="子表主键字段名" />
</set>


-------------------------------------------
多对多双向关联
将上述配置结合便可



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值