2014年12月11日-关系映射

one-to-one

一对一......单向外键关联

1)annotation方式: 在加入外键(即加入引用的一方)的实体类的类名上加@Entity ; 在主键的get方法上加@id @GeneratedValue ;

  在体现关系的外键属性上加 @onetoone 和  @JoinColumn(name=”添加的外键的名字“,不写的话就是自动生成的名字)

package com.hb.model;

import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;

@Entity
public class Wife {
    private  int  id ;
    private  String  name ;

    @Id
    @GeneratedValue
    public int getId() {
        return id;
    }
  ....  
}
package com.hb.model;

import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.OneToOne;

@Entity
public class Husband {
    private  int  id ;
    private  String  name ;
    private  Wife   wife ;

    @Id
    @GeneratedValue
    public int getId() {
        return id;
    }

    public String getName() {
        return name;
    }

    @OneToOne
    @JoinColumn(name="wifeId")
    public Wife getWife() {
        return wife;
    }
    public void setId(int id) {
        this.id = id;
    }...

} 

2)在xml中,用到<many-to-one    unique="true">

public class Student {

    private  int  id ;
    private   String  age ;
    private  String  name ;
    // get、set方法省略
public class StuIdCard {
    private  int  id ;
    private  String  num ;
    private  Student  student ;
    // get、set方法省略

StuIdCard.hbm.xml如下:

<hibernate-mapping  package="com.hb.model">
    <!-- 映射表 和 类 -->
    <class  name="com.hb.model.StuIdCard">
        <id name="id"  column="id">
            <generator class="native"></generator>
        </id>
        <!--  映射具体的属性 -->
        <property name="num"  column="num"></property>
        <many-to-one name="student"  column="studentId" unique="true"></many-to-one>
    </class>

</hibernate-mapping>

一对一.......双向外键关联

1)annotation方式: 在两个实体类上均加入对方的引用,但是在单项的基础上,在加入的新的引用的实体类上加@onetoone(mappedBy=“另一个实体类的关于此类的引用的属性名”)

规律:凡是双向关联,必设mappedBy,表示被对方设置,即在数据库中,只有对方存在一个外键,防止冗余。

@Entity
public class Wife {
    private  int  id ;
    private  String  name ;
    private  Husband  husband ;

    @Id
    @GeneratedValue
    public int getId() {
        return id;
    }
    @OneToOne(mappedBy="wife")
    public Husband getHusband() {
        return husband;
    }
@Entity
public class Husband {
    private  int  id ;
    private  String  name ;
    private  Wife   wife ;

    @Id
    @GeneratedValue
    public int getId() {
        return id;
    }

    @OneToOne
    @JoinColumn(name="wifeId")
    public Wife getWife() {
        return wife;
    }
    

2)xml方式:用到<many-to-one    unique="true">  用到<one-to-one    property-ref="XXXX"> ,不是很懂

<hibernate-mapping  package="com.hb.model">
    <!-- 映射表 和 类 -->
    <class  name="com.hb.model.StuIdCard">
        <id name="id"  column="id">
            <generator class="native"></generator>
        </id>
        <!--  映射具体的属性 -->
        <property name="num"  column="num"></property>
        <many-to-one name="student"  column="studentId" unique="true"></many-to-one>
    </class>

</hibernate-mapping>
<hibernate-mapping  package="com.hb.model">
    <!-- 映射表 和 类 -->
    <class  name="com.hb.model.Student">
        <id name="id"  column="id">
            <generator class="native"></generator>
        </id>
        <!--  映射具体的属性 -->
        <property name="name"  column="name"></property>
        <property name="age"  column="age"></property>

        <one-to-one name="stuIdCard"  property-ref="student"></one-to-one>
    </class>

</hibernate-mapping>

一对一......单向主键关联 (主键关联用的很少,不重要)

1)annotation方式: 在加入外键(即加入另一个类引用的一方)的实体类的类名上加@Entity ; 在主键的get方法上加@id @GeneratedValue ; 在体现关系的外键属性上加 @onetoone 和  @@PrimaryKeyJoinColumn

注:但是在数据库中没有任何关联,不知道为什么

@Entity
public class Husband {
    private  int  id ;
    private  String  name ;
    private  Wife   wife ;

    @Id
    @GeneratedValue
    public int getId() {
        return id;
    }

    @OneToOne
    @PrimaryKeyJoinColumn
    public Wife getWife() {
        return wife;
    }
    
@Entity
public class Wife {
    private  int  id ;
    private  String  name ;
    private  int  age ;

    @Id
    @GeneratedValue
    public int getId() {
        return id;
    }

2)xml方式:其中一个映射文件用到<one-to-one    name="XXX">

  另一个映射文件用到<one-to-one    name="XXXX"  constrained=“true”>此的文件的主键的生成策略也要改变

一对一......双向主键关联 (主键关联用的很少,不重要)

annotation方式:

@Entity
public class Husband {
    private int id;
    private String name;
    private Wife wife;
    @Id
    @GeneratedValue
    public int getId() {
        return id;
    }

    public String getName() {
        return name;
    }
    @OneToOne
    @PrimaryKeyJoinColumn
    public Wife getWife() {
        return wife;
    }
@Entity
public class Wife {
    private int id;
    private String name;
    private Husband husband;
    @OneToOne
    @PrimaryKeyJoinColumn
    public Husband getHusband() {
        return husband;
    }
    public void setHusband(Husband husband) {
        this.husband = husband;
    }
    @Id
    @GeneratedValue
    public int getId() {
        return id;
    }

联合主键

常用的一种方法是:将符合主键单独写成一个类,称之为复合主键类,此类就是一个普通的类,无需任何注释。

其它的类的属性无需修改。

在含有复合主键的实体类上加上@IdClass     @IdClass标注复合主键类

在加入关系属性的实体类上加上 @OneToOne  和 @JoinColumns (此方法的属性是一个数组)

@Entity
@IdClass(value=WifePk.class)  //标注复合主键类
public class Wife {
    private  int  id ;
    private  String  name ;
    private  int  age ;

    @Id
    public int getId() {
        return id;
    }
    @Id
    public String getName() {
        return name;
    }
@Entity
public class Husband {
    private  int  id ;
    private  String  name ;
    private  Wife   wife ;

    @Id
    @GeneratedValue
    public int getId() {
        return id;
    }

    @OneToOne
    @JoinColumns(
            {
                @JoinColumn(name="wifeId", referencedColumnName="id") ,
                @JoinColumn(name="wifeName" , referencedColumnName="name")
            }
    )//这是一个数组,表示复合主键的名字还有对应的是类的属性
    public Wife getWife() {
        return wife;
    }
    
时间: 2024-10-09 18:37:04

2014年12月11日-关系映射的相关文章

接口2014年6月11日01:11:37

1 [1]C#中的接口和类有什么异同. 2 3 不同点: 4 不能直接实例化接口. 5 接口不包含方法的实现. 6 接口可以多继承,类只能单继承. 7 类定义可在不同的源文件之间进行拆分(partial). 8 9 相同点: 10 接口.类和结构都可以从多个接口继承. 11 接口类似于抽象基类:继承接口的任何非抽象类型都必须实现接口的所有成员. 12 接口和类都可以包含事件.索引器.方法和属性(属性本质上是两个方法). 13 14 基础知识:接口只能定义方法(只能定义行为,不能定义实现也就是字段

翻译:Gregory Larsen,2016/02/19(第一版:2014年12月17日)高级T-SQL阶梯1级:使用CROSS JOIN介绍高级T-SQL

原文链接:http://www.sqlservercentral.com/articles/Stairway+Series/119933/ 原文作者:Gregory Larsen,2016/02/19(第一版:2014年12月17日) 系列 本文是"Stairway Series:Stairway to Advanced T-SQL"的一部分 这个阶梯将包含一系列文章,这些文章将在前面两个T-SQL阶梯,T-SQL DML和T-SQL超越基础知识的T-SQL基础上进行扩展. 这个楼梯应

米的建站日记(2014年12月9日)

后台框架准备用struts2.2.3 + spring3.1.0 + mybatis3.1.0 这是在网上找到的一位大牛的demo http://blog.csdn.net/afgasdg/article/details/7392367 额,自己找太麻烦了,就用他的吧 数据库使用mongodb,这个我从来没用过,关系型数据库以前倒是用过,暂且边学边做把.~ ~ 各种jar包,js库,现在加起来快22M了呢. 奇怪,为毛项目启动就报错,我想应该是spring的配置文件还没有和数据库连上,明天准备看

【每日圣经日历】2014年10月11日

注:移动用户(特别是苹果(Ipad))可以全选文字使用机器朗读 Samedi le 11 Octobre 2014 礼拜六 2014年10月11日 Ne vous enivrez pas de vin: c'est de la débauche. Soyez, au contraire, remplis de l'Esprit;entretenez-vous par des psaumes, par des hymnes, et par des cantiques spirituels, cha

2016年12月11日《每天听本书》:爱情数学:如何用数学找到真爱

2016年12月11日今天的每天听本书爱情数学:如何用数学找到真爱 现在为大家简要截取 今天罗辑社的每天听本书 微信群发布情况介绍 <每天听本书>,不是逐字逐句的"朗读".因为那会耗费用户更多的时间. <每天听本书>,不是对书本框架结构的"缩写".因为丢掉了细节就是丢掉了灵魂. <每天听本书>,也不是"笔记".摘抄书中的原句,脱离上下文环境,其实没有意义. <每天听本书>,是"转述&quo

oracle事务处理及实例演示jdbc操作批量删除 2014年8月11日

事务 作为逻辑处理的基本单位,对于数据库操作来说由一条或者多条sql语句来构成.当然还有针对非数据库操作的,如在计算机中设置的还原点即是一个很好的应用. 对于事务的基本性质在另一篇中有所叙述:SQL 事务及实例演示 oracle和sql server在事务上区别 sql server中的事务一般分为隐式事务.显式事务.自动提交事务. 自动事务:对于sql server来说,当客户端提交一条sql语句时,这时候sql server都会自动启动一个事务:对于这样的事务,在执行完sql语句后会自动提交

2015微软创新杯Imaginecup大赛报名进行中(报名截止2014年12月31日23:59)

CSDN高校俱乐部与微软官方合作,2015微软创新杯大赛中国区官网落户CSDN高校俱乐部:http://student.csdn.net/mcs/imaginecup2015 在微软官方设置创新杯中国区奖项之外,CSDN高校俱乐部每个竞赛项目特设一等奖.二等奖.三等奖及纪念奖若干名. CSDN高校俱乐部特别奖(获奖者需在高校俱乐部进行过报名备案):详情-> 1. 一等奖(三支团队): 每个竞赛项目一等奖一名,每支团队获得奖金2,000元人民币,团队成员每人尊享2015 CSDN VIP年卡会员:

论坛2014年7月11日故障的一些问题

2014年7月14日,我接到站务部长李东升的通知,说有人反应论坛登录不上.我就去登陆了一下.现象主要如下: 论坛首页可以访问. 进入校内门户,再进入论坛登录界面,可以读取到用户信息 登录,提示成功登录. 返回到论坛首页,发现问题了,没有读到用户.这个时候还可以访问,时间大概是13点. 接着我去找原因. 我先试了下进网站的后台,发现没有问题,可以进入.也可以审核用户.顺手就审核了用户.用大号在后台看了下管理员后台登录和操作,10号的时候lwcjjpw这个用户登录了后台.奇怪了,这个不是以前的老人的

云计算之路-阿里云上-寒流来袭:2014年12月23日21:45-23:15网站故障

1个多小时间的网站故障给大家带来很大的麻烦,在这里我们表示深深的歉意!希望大家能够谅解! 这两天上海的气温在回升,而杭州的云上却突然袭来一股寒流. 12月23日晚上,阿里云进行了一次RDS的发布,在这次发布中自动地修改了我们的数据库连接数限制,谁也不知道,然后... 21:45:52左右开始,日志中出现大量执行时间超过5秒的请求. 然后出现超过10秒.20秒...甚至超过100秒的请求. 21:46:50左右,开始出现数据库连接错误: System.Data.SqlClient.SqlExcep