• 博客园logo
  • 会员
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • HarmonyOS
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录
Y-wee
博客园    首页    新随笔    联系   管理     

hibernate双向一对一映射关系的配置

hibernate双向一对一映射关系的配置

1、外键映射

1.1、实体类

package com.yl.bean;

import java.io.Serializable;

/**
 * 公民实体类
 */
public class Person implements Serializable {
    private Integer id;
    private String name;
    private PersonCard card;

    public Person() {
    }

    public Person(Integer id, String name, PersonCard card) {
        this.id = id;
        this.name = name;
        this.card = card;
    }

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public PersonCard getCard() {
        return card;
    }

    public void setCard(PersonCard card) {
        this.card = card;
    }

    @Override
    public String toString() {
        return "Person{" +
                "id=" + id +
                ", name='" + name + '\'' +
                ", card=" + card +
                '}';
    }
}

package com.yl.bean;

import java.io.Serializable;

/**
 * 身份证实体类
 */
public class PersonCard implements Serializable {
    private Integer id;
    private String cardNo;
    private Person person;

    public PersonCard() {
    }

    public PersonCard(Integer id, String cardNo, Person person) {
        this.id = id;
        this.cardNo = cardNo;
        this.person = person;
    }

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public String getCardNo() {
        return cardNo;
    }

    public void setCardNo(String cardNo) {
        this.cardNo = cardNo;
    }

    public Person getPerson() {
        return person;
    }

    public void setPerson(Person person) {
        this.person = person;
    }

    @Override
    public String toString() {
        return "PersonCard{" +
                "id=" + id +
                ", cardNo='" + cardNo + '\'' +
                ", person=" + person +
                '}';
    }
}

1.2、全局配置文件(hibernate.cfg.xml)

<!DOCTYPE hibernate-configuration PUBLIC
        "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
        "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
    <session-factory>
        <!--数据源配置-->
        <property name="hibernate.connection.driver_class">com.mysql.cj.jdbc.Driver</property>
        <property name="hibernate.connection.url">jdbc:mysql://localhost:3306/hibernate?characterEncoding=utf8&amp;serverTimezone=GMT%2B8</property>
        <property name="hibernate.connection.username">root</property>
        <property name="hibernate.connection.password">123456</property>
        <!--显示sql-->
        <property name="hibernate.show_sql">true</property>
        <!--自动创建表-->
        <property name="hibernate.hbm2ddl.auto">update</property>
        <!--指定映射配置文件的位置-->
        <mapping resource="com/yl/bean/Person.hbm.xml"></mapping>
        <mapping resource="com/yl/bean/PersonCard.hbm.xml"></mapping>
</session-factory>
</hibernate-configuration>

1.3、公民映射配置文件(Person.hbm.xml)

<!DOCTYPE hibernate-mapping PUBLIC
        "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
        "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
    <!--配置User类-->
    <class name="com.yl.bean.Person" table="t_person">
        <!--主键-->
        <id name="id" column="id" type="java.lang.Integer">
            <!--将主键交给本地数据库管理-->
            <generator class="native"></generator>
        </id>

        <property name="name" column="name" type="java.lang.String"></property>

        <one-to-one name="card" class="com.yl.bean.PersonCard"></one-to-one>
    </class>
</hibernate-mapping>

1.4、身份证映射配置文件(PersonCard.hbm.xml)

<!DOCTYPE hibernate-mapping PUBLIC
        "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
        "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
    <!--配置User类-->
    <class name="com.yl.bean.PersonCard" table="t_personcard">
        <!--主键-->
        <id name="id" column="id" type="java.lang.Integer">
            <!--将主键交给本地数据库管理-->
            <generator class="native"></generator>
        </id>

        <property name="cardNo" column="cardNo" type="java.lang.String"></property>

        <many-to-one name="person" column="person_id" unique="true"></many-to-one>
    </class>
</hibernate-mapping>

1.5、测试类

 @Test
    public void test01(){
        Person person=new Person();
        person.setName("yl001");

        PersonCard personCard=new PersonCard();
        personCard.setCardNo("001");

        person.setCard(personCard);
        personCard.setPerson(person);

        Session session= HibernateUtils.getSession();
        Transaction transaction=session.beginTransaction();
        session.save(person);
        session.save(personCard);
        transaction.commit();

        session.close();
    }

2、主键映射

  • 表的字段既是主键,又是外键(eg:身份证号码既是主键又是外键)

2.1、映射配置文件实现

  • 主要修改PersonCard.hbm.xml文件
<!DOCTYPE hibernate-mapping PUBLIC
        "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
        "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
    <!--配置User类-->
    <class name="com.yl.bean.PersonCard" table="t_personcard">
        <!--主键-->
        <id name="id" column="id" type="java.lang.Integer">
            <!--将主键交给本地数据库管理-->
            <generator class="native"></generator>
        </id>

        <property name="cardNo" column="cardNo" type="java.lang.String"></property>

        <!--<many-to-one name="person" column="person_id" unique="true"></many-to-one>-->
        <one-to-one name="person" class="Person" constrained="true"/>
    </class>
</hibernate-mapping>
记得快乐
posted @ 2020-10-12 11:18  Y-wee  阅读(149)  评论(0)    收藏  举报
刷新页面返回顶部
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3