Hibernate 第十讲 表关联关系(四)双向一对一主键关联

来源:互联网 发布:北京金贵软件 编辑:程序博客网 时间:2024/06/06 01:07

一:Annotation配置方式

package com.darren.relation.model;import javax.persistence.Entity;import javax.persistence.GeneratedValue;import javax.persistence.Id;import javax.persistence.OneToOne;import javax.persistence.PrimaryKeyJoinColumn;@Entitypublic class Wife {    private int id;    private String name;    private Husband husband;    @Id    @GeneratedValue    public int getId() {        return id;    }    public void setId(int id) {        this.id = id;    }    public String getName() {        return name;    }    public void setName(String name) {        this.name = name;    }    @OneToOne    @PrimaryKeyJoinColumn//表示用对方的主键来关联,对方为Wife是相对于Husband来说的    public Husband getHusband() {        return husband;    }    public void setHusband(Husband husband) {        this.husband = husband;    }}
package com.darren.relation.model;import javax.persistence.Entity;import javax.persistence.GeneratedValue;import javax.persistence.Id;import javax.persistence.JoinColumn;import javax.persistence.OneToOne;@Entitypublic class Husband {    private int id;    private String name;    private Wife wife;    @Id    @GeneratedValue    public int getId() {        return id;    }    public void setId(int id) {        this.id = id;    }    public String getName() {        return name;    }    public void setName(String name) {        this.name = name;    }    @OneToOne    @JoinColumn(name="wife_id_id")    public Wife getWife() {        return wife;    }    public void setWife(Wife wife) {        this.wife = wife;    }}

运行结果:

   create table Husband (        id integer not null auto_increment,        name varchar(255),        wife_id_id integer,        primary key (id)    )21:02:52,671 DEBUG SchemaExport:377 -    create table Wife (        id integer not null auto_increment,        name varchar(255),        primary key (id)    )21:02:52,718 DEBUG SchemaExport:377 -    alter table Husband        add index FKAEEA401B6C114D9E (wife_id_id),        add constraint FKAEEA401B6C114D9E        foreign key (wife_id_id)        references Wife (id)

二:Xml配置方式

package com.darren.relation.model;public class WifeXml {    private int id;    private String name;    private HusbandXml husbandXml;    public int getId() {        return id;    }    public void setId(int id) {        this.id = id;    }    public String getName() {        return name;    }    public void setName(String name) {        this.name = name;    }    public HusbandXml getHusbandXml() {        return husbandXml;    }    public void setHusbandXml(HusbandXml husbandXml) {        this.husbandXml = husbandXml;    }}
package com.darren.relation.model;public class HusbandXml {    private int id;    private String name;    private WifeXml wifeXml;    public int getId() {        return id;    }    public void setId(int id) {        this.id = id;    }    public String getName() {        return name;    }    public void setName(String name) {        this.name = name;    }    public WifeXml getWifeXml() {        return wifeXml;    }    public void setWifeXml(WifeXml wifeXml) {        this.wifeXml = wifeXml;    }}
<?xml version="1.0"?><!DOCTYPE hibernate-mapping PUBLIC        "-//Hibernate/Hibernate Mapping DTD 3.0//EN"        "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"><hibernate-mapping package="com.darren.relation.model">    <class name="WifeXml" table="wife_xml">        <id name="id" column="id">            <!--主键生成策略,自动增长 -->             <generator class="native"/>        </id>        <property name="name"></property>        <!-- husbandXml表示WifeXml里的属性husbandXml -->        <!-- wifeXml表示被 HusbandXml类里的wifeXml属性映射-->        <one-to-one name="husbandXml" property-ref="wifeXml"></one-to-one>    </class></hibernate-mapping>
<?xml version="1.0"?><!DOCTYPE hibernate-mapping PUBLIC        "-//Hibernate/Hibernate Mapping DTD 3.0//EN"        "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"><hibernate-mapping package="com.darren.relation.model">    <class name="HusbandXml" table="husband_xml">        <id name="id" column="id">            <!--此时的主键要靠wifeXml的主键生成,即即做主键又做外键 -->            <generator class="foreign"><!--此举表示要考HusbandXml类里的属性wifeXml去生成主键 --><param name="property">wifeXml</param>            </generator>        </id>        <property name="name"></property>        <!-- wifeXml表示HusbandXml类中的wifeXml对象 -->        <!-- wife_id表示HusbandXml生成的表中的外键名 -->        <!-- unique="true"表示是一对一关系 -->        <many-to-one name="wifeXml" column="wife_id" unique="true"></many-to-one>    </class></hibernate-mapping>

运行结果:

 create table husband_xml (        id integer not null,        name varchar(255),        wife_id integer unique,        primary key (id)    )21:17:17,531 DEBUG SchemaExport:377 -    create table wife_xml (        id integer not null auto_increment,        name varchar(255),        primary key (id)    )21:17:17,562 DEBUG SchemaExport:377 -    alter table husband_xml        add index FK4E0A121393F8EC53 (wife_id),        add constraint FK4E0A121393F8EC53        foreign key (wife_id)        references wife_xml (id)

原创粉丝点击