您的位置:首页 > 编程语言 > Java开发

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

2014-10-12 19:09 363 查看
关系映射

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

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

一对一映射

一对一单向外键关联:在被约束的属性上增加@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>

一对一双向外键关联:在单向映射基础上,另一个类增加@OneToOne(mappedBy="类名") 或在配置文件中增加<one-to-one>并把property-ref设为对应类名,例如
@OneToOne(mappedBy="student")
public Student getStudent() {
return student;
}
<one-to-one name="teacher" property-ref="student">

一对一主键映射(单向and双向):使用@primaryKeyJoinColumn 或在配置文件中将generator的class属性设为foreign,然后使用<one-to-one>

多对一和一对多映射

多对一单向关联:在多的一端加入@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>

一对多单向关联:在一的一端加入@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>

一对多/多对一双向关联:在双方都建立单向关系的基础上,把一的@OneToMany改成@OneToMany(mappedBy="类名"),配置文件只需要保证设置的字段名相同即可

多对多映射

多对多单向关联:使用@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>

多对多双向关联:在另一方使用@ManyToMany(mappedBy="类名"),配置文件只需要保证的表名以及字段名相同即可。

关联对象的增删改查

cascade:设置持久化是对关联对象的操作(增删改)。
fetch:设置查询时是否及时更新关联对象,EAGER为及时更新,LAZY为需要时在更新。多的一方默认为EAGER,一的一方默认为LAZY。

继承映射(三种方式)

一张表存储父类和子类的所有属性,优点 是查询方便,缺点是会有表的许多值会空着产生浪费。
每张表存储一个类,优点是空间不会浪费,缺点是需要遍历查询太过麻烦。
一张表存储父类,其他表存储子类特有属性,子表通过外键连接父表,这是最好办法。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: