文章标题
来源:互联网 发布:cntv5 中国网络电视台5 编辑:程序博客网 时间:2024/06/10 14:05
Hibernate—对象关系模型
hibernate中共有4种对象关系
- one-to-many
- many-to-one
- one-to-one
- many-to-many
one-to-many:一对多,例如一个department对应多个employer,在hibernate的关系映射文件中如何配置
首先创建domain对象
class Department{ private Integer id; private String name; private Set<Employer> employers;}
class Employer{ private Integer id; private String name;}
再配置对象关系映射文件,在Department.hbm.xml中如下配置
<set name="employers" > <key column="department_id"></key> <one-to-many class="com.domain.Employer"></set>
在xml文件中的set中配置one-to-many关系,其中的key值属性中column对应的就是该表的外键,而class属性对应的就是外键对应的那个domain对象
many-to-one:多对一映射关系,上个例子中多个employer对应一个department
domain对象
class Department{ private Integer id; private String name;}class Employer{ private Integer id; private String name; private Department department;}
XML文件
““
name对应的是domain对象的属性,而column则是对应的那个外键one-to-one:分为两种 1. 主键对应domain对象
class Person {
private Integer id;
private String name;
private IdCard idCard;
}
class IdCrad{
private Integer id;
private Date validDate;
private Person person;
}
对象映射文件Person.hbm.xml <id name="id" type="java.lang.Integer"> <column name="id"></column> <generator class="identity"></generator> </id> <property name="name" type="java.lang.String"> <column name="name" length="64" not-null="true"></column> </property> <one-to-one name="idCard" constrained="true" class="com.hjy.domain.IdCard" ></one-to-one>IdCard.hbm.xml<class name="com.hjy.domain.IdCard"> <id name="id" type="java.lang.Integer"> <column name="id" ></column> <!--注意这里子对象的生成策略为foreign--> <generator class="foreign"> <!--注意这里的foreign生成策略需要配对应的property即对应表的属性--> <param name="property">person</param> </generator> </id> <property name="validDate" type="java.util.Date"> <column name="valiDate" ></column> </property> <one-to-one name="person" class="com.hjy.domain.Person" constrained="true" ></one-to-one> </class>
向Mysql中添加测试数据Session session=HibernaterUtil.getCurrentSession(); Transaction tx=session.beginTransaction(); Person p=new Person(); IdCard ic=new IdCard(); p.setName("sheeran"); ic.setValidDate(new Date()); //注意这里将person添加到idcard中 ic.setPerson(p); session.save(p); session.save(ic); tx.commit();
在添加数据的时候需要注意:应将主属性添加到子属性中,然后先添加主属性,再添加子属性
2.基于外键的一对一对应
基于外键的一对一对应,这里其实可以看作是one-to-many的一个特殊例子,特殊之处在于,外键不能重复,所以必须要one-to-many中添加 unique,如下
<many-to-one name="person" unique="true"></many-to-one>
many-to-many
多对多的映射在生活中十分常见,但是需要注意的是我们在创建关系的时候应当避免使用many-to-many,而是使用两对one-to-many和many-to-one来代替many-to-many关系。
具体例子有选课:student - course 这便是many-to-many关系,但是我们需要再添加一个选课表来简化这种关系,原来的关系可以转换为 student - stuCourse 和 stuCourse - course ,这样子能大大简化原有关系的复杂程度,更加简洁;
- 文章标题文章标题文章标题文章标题文章标题文章标题文章标题文章标题文章标题文章标题文章标题文章标题文章标题文章标题文章标题文章标题文章标题
- 文章标题
- 文章标题
- 文章标题
- 文章标题 文章标题 文章标题 文章标题
- 文章标题
- 文章标题
- 文章标题
- 文章标题
- 文章标题
- 文章标题
- 文章标题
- 文章标题
- 文章标题
- 文章标题
- 文章标题
- 文章标题
- 文章标题
- 三、Memcached整合Spring cache注解完整示例(SSM框架)
- IntelliJ IDEA 2016.3 注册码
- java数据类型转换____FastJson框架对象和JSON转换
- 附件的下载问题
- 【CodeForces 779C】Dishonest Sellers(贪心)
- 文章标题
- Unity3D学习笔记
- HDU2448-spfa+KM
- ubuntu下用ffmpeg录制音频文件
- 测试人员应该如何发展?
- oracle创建数据库无法创建目录
- jstack 查看线程栈
- 让DIV水平和垂直居中的几种方法
- java数据类型转换____Gson框架对象和JSON转换