Hibernate中的各种关系映射与配置
来源:互联网 发布:常见数据库系统 编辑:程序博客网 时间:2024/06/06 03:11
组合主键映射
组合主键映射
ScoreId.java
public class ScoreId implements Serializable{
private int stuId;//学生编号
private int subjectId;//科目编号
//省略getter setter
}
Score.java //在主类中引用对应组件
public class Score {
private ScoreId scoreId;
private double result;//成绩
//省略 getter setter
}
映射文件的编写
<hibernate-mapping package="cn.siggy.pojo">
<class name="Score">
<composite-id name="scoreId" class="ScoreId">
<key-property name="stuId"></key-property>
<key-property name="subjectId"></key-property>
</composite-id>
<property name="result"/>
</class>
</hibernate-mapping>
session = HibernateUtil.getSession();
tx = session.beginTransaction();
Score s = new Score();
ScoreId sid = new ScoreId();
sid.setStuId(2);
sid.setSubjectId(6);
s.setResult(89);
s.setScoreId(sid);
session.save(s);
tx.commit();
大对象映射
大对象映射
public class Student { //Student.java
private int id;
private String name;
private int age;
//存放大数据 可以存放4G的内容
private Blob image;
private Clob introduce;
//省略get/set
}
<hibernate-mapping package="cn.siggy.pojo">
<class name="Student">
<id name="id">
<generator class="native"></generator>
</id>
<property name="name"/>
<property name="age"/>
<property name="image" type="java.sql.Blob"/>
<property name="introduce" type="java.sql.Clob"/>
</class>
</hibernate-mapping>
session = HibernateUtil.getSession();
tx = session.beginTransaction();
Student stu = new Student();
stu.setName("尹志平");
stu.setAge(23);
Blob blob = new SerialBlob("ttt".getBytes());
Clob clob = new SerialClob("sss".toCharArray());
stu.setImage(blob);
stu.setIntroduce(clob);
session.save(stu);
tx.commit();
单向多对一关联映射
单向多对一的关联映射
public class Student {
private int id;
private String name;
private int age;
private Grade grade;
//get…set
}
public class Grade {
private int id;
private String name;
//get…set
}
<hibernate-mapping package="cn.siggy.pojo"><!--Grade.hbm.xml-->
<class name="Grade">
<id name="id">
<generator class="native"></generator>
</id>
<property name="name"/>
</class>
</hibernate-mapping>
<!--Student.hbm.xml-->
<hibernate-mapping package="cn.siggy.pojo">
<class name="Student">
<id name="id">
<generator class="native"></generator>
</id>
<property name="name"/>
<property name="age"/>
<!-- 多对一 name表示属性名 class指明 属性对应的类
column指 数据库表中的列名-->
<many-to-one name="grade" class="Grade"
column="grade_id" foreign-key="fk_grade" not-null="true"/>
</class>
</hibernate-mapping>
单向一对多关联映射
单向一对多的关联映射
public class Student {
private int id;
private String name;
private int age;
//get…set
}
public class Grade {
private int id;
private String name;
private Set<Student>students = new HashSet<Student>(0); //get…set
}
<hibernate-mapping package="cn.siggy.pojo">
<class name="Grade">
<id name="id">
<generator class="native"></generator>
</id>
<property name="name"/>
<!-- set是 Grade中的集合属性 name属性名称-->
<set name="students">
<!-- key表示外键 column外键列名-->
<key column="grade_id" not-null="true"></key>
<!-- one-to-many 一对多 类Grade 中 students所表示类型 -->
<one-to-many class="Student"/>
</set>
</class>
</hibernate-mapping>
<hibernate-mapping package="cn.siggy.pojo">
<class name="Student">
<id name="id">
<generator class="native"></generator>
</id>
<property name="name"/>
<property name="age"/>
</class>
</hibernate-mapping>
双向一对多关联映射
双向一对多的关联映射
public class Student {
private int id;
private String name;
private int age;
private Grade grade;
//get…set
}
public class Grade {
private int id;
private String name;
private Set<Student>students = new HashSet<Student>(0); //get…set
}
<hibernate-mapping package="cn.siggy.pojo">
<class name="Grade">
<id name="id">
<generator class="native"></generator>
</id>
<property name="name"/>
<!-- set是 Grade中的集合属性 name属性名称-->
<set name="students">
<!-- key表示外键 column外键列名-->
<key column="grade_id"></key>
<!-- one-to-many 一对多 类Grade 中 students所表示类型 -->
<one-to-many class="Student"/>
</set>
</class>
</hibernate-mapping>
<hibernate-mapping package="cn.siggy.pojo">
<class name="Student">
<id name="id">
<generator class="native"></generator></id>
<property name="name"/>
<property name="age"/>
<many-to-one name="grade" class="Grade" column="grade_id" not-null="true"></many-to-one>
</class>
</hibernate-mapping>
基于外键单向一对一的关联映射
public class Person {
private int id;
private String name;
private int age;
private IdCard idCard;
//get…set
}
public class IdCard{
private int id;
private String code;
//get…set
}
<hibernate-mapping package="cn.siggy.pojo">
<class name="Person">
<id name="id">
<generator class="native"></generator>
</id>
<property name="name"/>
<property name="age"/>
<!-- unique="true"时候 可以设置一对一的关系-->
<many-to-one name="idCard" class="IdCard" cascade="save-update"
column="idcard_id" foreign-key="fk_idcard" not-null="true"
unique="true"/>
</class>
</hibernate-mapping>
<hibernate-mapping package="cn.siggy.pojo">
<class name="IdCard">
<id name="id">
<generator class="native"></generator>
</id>
<property name="code"/>
</class>
</hibernate-mapping>
基于外键双向一对一关联映射
public class IdCard {
private int id;
private String code;
private Person person;
//get --- set
}
public class Person {
private int id;
private String name;
private int age;
private IdCard idCard;
//get --- set
}
<hibernate-mapping package="cn.siggy.pojo">
<class name="IdCard">
<id name="id">
<generator class="native"></generator>
</id>
<property name="code"/>
<one-to-one name="person" property-ref="idCard"/>
</class>
</hibernate-mapping>
<hibernate-mapping package="cn.siggy.pojo">
<class name="Person">
<id name="id">
<generator class="native"></generator>
</id>
<property name="name"/>
<property name="age"/>
<!--
unique="true"时候 可以设置一对一的关系
-->
<many-to-one name="idCard" class="IdCard" cascade="save-update"
column="idcard_id" foreign-key="fk_idcard" not-null="true"
unique="true"/>
</class>
</hibernate-mapping>
基于主键的单向一对一的关联映射
public class Person {
private int id;
private String name;
private int age;
private IdCard idCard;
//get…set
}
public class IdCard{
private int id;
private String code;
//get…set
}
<hibernate-mapping package="cn.siggy.pojo">
<class name="Grade">
<id name="id">
<generator class="native"></generator>
</id>
<property name="code"/>
</class>
</hibernate-mapping>
<hibernate-mapping package="cn.siggy.pojo">
<class name="Person">
<id name="id">
<!-- foreign表示引用外键-->
<generator class="foreign">
<!-- 引用idCard属性所对应的主键-->
<param name="property">idCard</param>
</generator>
</id>
<property name="name"/>
<property name="age"/>
<!-- 一对一 -->
<one-to-one name="idCard" constrained="true" cascade="save-update"/>
</class>
</hibernate-mapping>
基于主键的双向一对一的关联映射
public class Person {
private int id;
private String name;
private int age;
private IdCard idCard;
//get --set
}
public class IdCard {
private int id;
private String code;
private Person person;
//get --set
}
<hibernate-mapping package="cn.siggy.pojo">
<class name="Person">
<id name="id">
<!-- foreign表示引用外键 -->
<generator class="foreign">
<!-- 引用idCard属性所对应的主键-->
<param name="property">idCard</param>
</generator>
</id>
<property name="name"/>
<property name="age"/>
<!-- 一对一 -->
<one-to-one name="idCard" constrained="true" cascade="save-update"/>
</class>
</hibernate-mapping>
<hibernate-mapping package="cn.siggy.pojo">
<class name="IdCard">
<id name="id">
<generator class="native"></generator>
</id>
<property name="code"/>
<one-to-one name="person"/>
</class>
</hibernate-mapping>
基于主键的单向多对多的关联映射
public class Role {
private int id;
private String name;
private Set<Function>functions = new HashSet<Function>(0);
//get…set
}
public class Function {
private int id;
private String name;
private String code;
private String url;
//get…set }
<hibernate-mapping package="cn.siggy.pojo">
<class name="Role">
<id name="id">
<generator class="native"></generator>
</id>
<property name="name"/>
<!-- 多对多 -->
<set name="functions" table="role_func" cascade="save-update">
<!-- 表示当前类 映射到关系表中的列-->
<key column="rid"/>
<!-- 所对应的另一方在关系表中的列-->
<many-to-many column="fid" class="Function"/>
</set>
</class>
</hibernate-mapping>
<hibernate-mapping package="cn.siggy.pojo">
<class name="Function">
<id name="id">
<!-- foreign表示引用外键-->
<generator class="native"/>
</id>
<property name="name"/>
<property name="code"/>
<property name="url"/>
</class>
</hibernate-mapping>
基于主键的双向多对多的关联映射
public class Role {
private int id;
private String name;
private Set<Function>functions = new HashSet<Function>(0);
//get…set
}
public class Function {
private int id;
private String name;
private String code;
private String url;
private Set<Role> roles = new HashSet<Role>(0);
//get…set }
<hibernate-mapping package="cn.siggy.pojo">
<class name="Role">
<id name="id">
<generator class="native"></generator>
</id>
<property name="name"/>
<!-- 多对多 -->
<set name="functions" table="role_func" cascade="save-update">
<!-- 表示当前类 映射到关系表中的列-->
<key column="rid"/>
<!-- 所对应的另一方在关系表中的列-->
<many-to-many column="fid" class="Function"/>
</set>
</class>
</hibernate-mapping>
<hibernate-mapping package="cn.siggy.pojo">
<class name="Function">
<id name="id"><generator class="native"/></id>
<property name="name"/>
<property name="code"/><property name="url"/>
<set name="roles" table="role_func" inverse="true">
<key column="fid"/>
<many-to-many column="rid" class="Role"/>
</set>
</class>
</hibernate-mapping>
基于List集合映射
public class Grade {
private int id;
private String name;
private List<Student>students = new ArrayList<Student>(0);
}
<hibernate-mapping package="cn.siggy.pojo">
<class name="Grade">
<id name="id">
<generator class="native"></generator>
</id>
<property name="name"/>
<list name="students" cascade="all">
<!-- key表示外键 column外键列名-->
<key column="grade_id"></key>
<!-- 在多的一端 产生一列 用来表示顺序 如果不指明列名 默认为idx 值由hibernate来维护
-->
<list-index column="sort"></list-index>
<!-- one-to-many 一对多 类Grade 中 students所表示类型 -->
<one-to-many class="Student"/>
</list>
</class>
基于map集合映射
public class Grade {
private int id;
private String name;
private Map<String,Student>students = new HashMap<String,Student>(0);
}
<hibernate-mapping package="cn.siggy.pojo">
<class name="Grade">
<id name="id">
<generator class="native"></generator>
</id>
<property name="name"/>
<map name="students" cascade="all">
<!-- key表示外键 -->
<key column="grade_id"/>
<!-- map-key是映射为map集合时,对应key值 key值 建议为唯一 -->
<map-key type="string" column="name"/>
<one-to-many class="Student"/>
</map>
</class>
</hibernate-mapping>
基于一张表的继承映射
public class Person {
private int id;
private String name;
private int age;
}
public class Studentextends Person{
private String work;
}
public class Teacherextends Person{
private int salary;
}
<hibernate-mapping package="cn.siggy.pojo">
<class name="Person">
<id name="id" column="id">
<generator class="native"></generator>
</id>
<!-- 指明鉴别器 -->
<discriminator column="type" type="string"/>
<property name="name"/>
<property name="age"/>
<subclass name="Student" discriminator-value="s">
<property name="work"/>
</subclass>
<subclass name="Teacher" discriminator-value="t">
<property name="salary"/>
</subclass>
</class>
</hibernate-mapping>
- Hibernate中的各种关系映射与配置
- HIbernate 关系映射配置
- Hibernate映射关系配置
- hibernate关系映射配置
- hibernate中的关系映射
- hibernate对象关系映射配置
- hibernate 关系映射文件配置
- hibernate 关联关系映射配置
- hibernate映射关系的配置
- Hibernate的映射关系配置
- hibernate中的映射关联关系
- Hibernate中的映射配置
- 整理笔记---Hibernate的xml与Annotation配置映射关系
- 2-Hibernate的各种关系映射
- Hibernate各种关联映射关系梳理
- 用hibernate+注解实现各种关系映射
- hibernate中的映射配置详解
- Hibernate学习笔记 2 - 关系映射配置
- MSSQL:通过文本框浏览数据
- 认知偏差
- 【原创】Android 引用第三方库文件大全
- java_ee_sdk-7u2的安装与 启动
- windows下使用vs2008编译libuv库
- Hibernate中的各种关系映射与配置
- Android 常见内存泄露
- C++转换运算符reinterpret_cast 别人的
- MSSQL:通过表格单页浏览数据库
- java中 & 和 &&的区别
- 2017全球超级计算Top500和Green500榜单出炉
- Windows下mnist数据集caffemodel分类模型训练及测试
- HTML5-列表标签
- POJ 1496 Word Index 笔记