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

关系映射

Hibernate中的关系映射主要分一对一、一对多和多对多三种,这里所说的关系映射主要是指如何用数据库表的连接维持对象之间的关系。

一下映射方法均会分别指出Annotation配置方法以及XML配制方法。

一对一映射

  1. 一对一单向外键关联:在被约束的属性上增加@OneToOne和@JoinColumn(name="生成字段名") 或在配置文件中添加<many-to-one>并把unique设为true,例如:
    <pre name="code" class="java"><pre name="code" class="java"><pre name="code" class="java">@OneToOne
    @JoinColumn(name="stu_id")
    public Student getStudent() {
    	return student;
    }
     
     
     
    <many-to-one name="teacher" column="teacher_id" unique="true"></many-to-one>
  2. 一对一双向外键关联:在单向映射基础上,另一个类增加@OneToOne(mappedBy="类名") 或在配置文件中增加<one-to-one>并把property-ref设为对应类名,例如
    @OneToOne(mappedBy="student")
    public Student getStudent() {
    	return student;
    }
    
    <one-to-one name="teacher" property-ref="student">
  3. 一对一主键映射(单向and双向):使用@primaryKeyJoinColumn 或在配置文件中将generator的class属性设为foreign,然后使用<one-to-one>
多对一和一对多映射
  1. 多对一单向关联:在多的一端加入@ManyToOne和@JoinColumn(name="生成字段名") 或在配置文件中添加<many-to-one>,例如:
    @OneToOne
    @JoinColumn(name="stu_id")
    public Student getStudent() {
    	return student;
    }
    <many-to-one name="teacher" column="teacher_id" cascade="all"></many-to-one>
  2. 一对多单向关联:在一的一端加入@OneToMany和@JoinColumn(name="生成字段名") 或在配置文件中添加<set>和<many-to-one>,例如:
    @OneToMany
    @JoinColumn(name="groupId")
    public Set<User> getUsers() {
    	return users;
    }
    
    <set name="users">
    	<key column="groupId"></key>
    	<one-to-many class="com.bjsxt.hibernate.User"/>
    </set>
  3. 一对多/多对一双向关联:在双方都建立单向关系的基础上,把一的@OneToMany改成@OneToMany(mappedBy="类名"),配置文件只需要保证设置的字段名相同即可
多对多映射
  1. 多对多单向关联:使用@ManyToMany和@JoinTable,JoinTable中需要制定中间表的表名和生成的字段名。配置文件需要添加添加<set>和<many-to-many>例如:
    @ManyToMany
    @JoinTable(name="t_s",
    	joinColumns={@JoinColumn(name="teacher_id")},
    	inverseJoinColumns={@JoinColumn(name="student_id")}
    	)
    
    <set name="students" table="t_s">
    	<key column="teacher_id"></key>
    	<many-to-many class="com.bjsxt.hibernate.Student" column="student_id"/>
    </set>
  2. 多对多双向关联:在另一方使用@ManyToMany(mappedBy="类名"),配置文件只需要保证的表名以及字段名相同即可。
关联对象的增删改查
  1. cascade:设置持久化是对关联对象的操作(增删改)。
  2. fetch:设置查询时是否及时更新关联对象,EAGER为及时更新,LAZY为需要时在更新。多的一方默认为EAGER,一的一方默认为LAZY。
继承映射(三种方式)
  1. 一张表存储父类和子类的所有属性,优点 是查询方便,缺点是会有表的许多值会空着产生浪费。
  2. 每张表存储一个类,优点是空间不会浪费,缺点是需要遍历查询太过麻烦。
  3. 一张表存储父类,其他表存储子类特有属性,子表通过外键连接父表,这是最好办法。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值