hibernate的数据关联映射

数据关联映射分为:一对多、多对一,一对一,多对多。

cascade属性
• 
save-update:在执行保存和修改是进行级联操作
• 
delete:在执行删除时进行级联操作
• 
all:在所有情况下进行级联操作
 none:不进行级联操作(默认)

抓取策略

一对多、多对一

一对多、多对一持久化类设计
// User类
public class User { 

private int id;
private String name;
private int age;
private Set<Address> addressSet; 

//get set method
}

//Address类
public class Address { 

private int id;
private String address;
private int tel;
private User user; 

//get set method
}
address.hbm.xml
<hibernate-mapping package="com.hussion.pojo">
    <class name="Address" table="t_address">
        <id name="id">
          <generator class="native"/>
        </id>
        <property name="address"></property>
        <property name="tel"></property>
        <many-to-one name="user" class="User" column="userid"/>
    </class>
</hibernate-mapping>
user.hbm.xml
<hibernate-mapping package="com.hussion.pojo">
    <class name="User" table="t_user">
        <id name="id" column="id">
          <generator class="native"></generator>
        </id>
        <property name="name" column="name"></property>
        <property name="age" column="age"></property> 

        <!--inverse="true"放弃关系维护-->
        <set name="addressSet" inverse="true">
          <key column="userid"/>
          <one-to-many class="Address"/>
        </set>
    </class>
</hibernate-mapping>

一对一

持久化类设计
public class Person { 

private int id;
private String userName;
private Card card; 

//get set Method
} 

public class Card { 

private int id;
private String cardNum;
private Person person; 

//get set Method
}
person.hbm.xml
<hibernate-mapping package="com.hussion.pojo">
    <class name="Person" table="t_person">
        <id name="id">
          <generator class="native"></generator>
        </id>
         <property name="userName"></property>
          <one-to-one name="card" class="Card" cascade="delete"/>
    </class>
</hibernate-mapping>

多对多

ublic class Teacher { 

private int id;
private String name;
private Set<Student> student; 

//get set method
}
public class Student { 

private int id;
private String name;
private Set<Teacher> teacher; 

//get set method
}
teacher.hbm.xml
<hibernate-mapping package="com.hussion.pojo">
    <class name="Teacher" table="t_teacher">
        <id name="id" column="id">
          <generator class="native"></generator>
        </id>
          <property name="name"></property>
        <set name="student" table="t_student_techer">
          <key column="teacherid"/>
          <many-to-many class=“Student” column=“studentid”/>
        </set>
    </class>
</hibernate-mapping>
student.hbm.xml
<hibernate-mapping package="com.hussion.pojo">
    <class name="Student" table="t_student">
        <id name="id" column="id">
          <generator class="native"></generator>
        </id>
        <property name="name"></property>
        <set name="teacher" table="t_student_techer">
            <key column="studentid"/>
            <many-to-many class="Teacher" column="teacherid />
        </set>
    </class>
</hibernate-mapping>
多对多一方要放弃关系维护
<set name="student" table="t_teacher_student"  inverse="true">

排序
<many-to-many class="Student" column="s_id"  order-by="id asc,name desc"></many-to-many>

延迟加载关闭 : lazy="false"

hibernate的数据关联映射

时间: 2024-10-24 13:42:13

hibernate的数据关联映射的相关文章

Hibernate之1-N关联映射

一.Hibernate之1-N关联映射 1. 哪边是 1 , 哪边是多 ? 需要从业务的角度来说明.例如,Employee 和 Department 之间就是 n-1 的关联关系,Order 和 Customer 之间也是 n-1 的关联关系. 1). 关联关系是有方向的: 2). 如何在类中来建立关联关系呢 ? 解:通过成员变量的方式即可. 2. 单向 n-1 关联关系 1). 域对象中,在 Order 中声明一个 Customer 类型的成员变量,并提供 setter.getter publ

【Hibernate步步为营】--关联映射之多对一

上篇文章讨论了Hibernate的基本映射,一个实体类对应着一张表,在相应的Hibernate Mapping文件中使用<class>标签映射.并且实体类中的普通属性对应着表字段,使用<property>标签映射.另外在构造实体类时应注意:在实体类中应实现无参的默认的构造函数,提供一个标示,建议不要使用final修饰实体类,为实体类生成getter和setter方法,最后介绍了几种主要的主键生成策略,接下来讨论多对一映射. 一.关联映射之多对一 对于多对一关联映射其实很容易理解,在

hibernate多对一关联映射

hibernate多对一关联映射: 实体类 (POJO) public class Student{ private int stuId; private String stuNum; private String stuName; private ClassRoom cr; } public class ClassRoom{ private int claId; private String claName; } 映射文件 <class name=" Student" tabl

Hibernate一对一双向关联映射

关键原因在于对象模型具有方向性: 单向:一端只能加载另一端,不能反过来. 双向:两端都可以加载另一端. 问题来了:如何我们想从身份证端(IdCard)加载人(Person),怎么办呢? 下面我们开始介绍一对一的双向关联映射. 映射原理 双向关联映射与单向关联映射的原理是一样的,双向关联映射并不影响存储,只影响加载.所以,双向关联映射和单向关联映射的关系模型是一样的即数据库的表结构是一样的,只是IdCard的实体类和配置文件(IdCard.hbm.xml)发生了一点点变化. 对象模型 从上图中可以

【Hibernate】——一对一关联映射

两个对象之间如果是一对一的关系,如Person-IdCard.在Hibernate中有两种策略可以实现一对一的关联映射: 主键关联:即让两个对象具有相同的主键值,以表明它们之间的一一对应的关系:数据库表不会有额外的字段来维护它们之间的关系,仅通过表得主键来关联. 唯一外键关联:外键关联,本来是用于多对一的配置,但是如果加上唯一的限制之后,也可以用来表示一对一关联关系: 而每种策略又分为两种方向的对应关系,即单向一对一关系和双向一对一关系.分类的原因一般是由需求决定的,单双向是站在不同的角度去看人

hibernate之关于关联映射的综合应用

[hibernate]之关于关联映射的综合应用 1.关联映射如何处理业务逻辑 2.如何指定中间表 3.如何进行级联操作 4.如何解决Hibenrate建表过程中主键错乱问题 现在有三张表 Student(学生表),Course(课程表),Score(学生,课程,分数,表) 那么我们分析业务逻辑可知,学生和课程是多对多的关系,学生和分数表是一对多的关系,课程和分数也是一对多的关系. 直接看Annotations配置,在这里我所有的配置都是双向关联,这样在分数,课程,学生,之中,可以任意找到彼此!

Hibernate框架之关联映射入门

关联映射就是将关联关系映射到数据库里,在对象模型中就是一个或多个引用. 一:配置单向多对一关联 在Emp类中定义一个Dept属性,而在Dept类中无须定义用于存放Emp对象的集合属性 01.Dept.java package cn.zhang.entity; //部门实体类 public class Dept { private Integer deptid;//编号 private String deptname;//名称 public Integer getDeptid() { return

Hibernate一对多关联映射的配置及其级联删除问题

首先举一个简单的一对多双向关联的配置: 一的一端:QuestionType类 package com.exam.entity; import java.util.Set; public class QuestionType { private String typeName; private char typeUniqueness; private Set quesion; public String getTypeName() { return typeName; } public void

Hibernate第二章关联映射的总结

1.type值的解释:如下图: 1)type的值,不是java语言的一个类型的全称,而是一个hibernate自定义 的类型的名称. 2)Type的值,其实是对应hibernate中的一个类型的简称,而由 org.hibernate.type包下面的类型来真正完成java类型与数据库类型的传 换. 2.单类对单表的映射配置 1)类型的处理: I.各种:type II.精度:precision,scale III.逻辑值的处理:boolean,yes_no 2)主键的处理 Native,assig