您当前的位置: 首页 >  hibernate

宝哥大数据

暂无认证

  • 0浏览

    0关注

    1029博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

Hibernate11_映射关系---OneToOne双向

宝哥大数据 发布时间:2017-08-27 11:38:52 ,浏览量:0

OneToOne双向是在One2One单向基础上修改 1、IDCard不变 IDC实体类
package com.chb.model;

public class IDCard {
    private int id;
    private String no;
    private Person person;


    public int getId() {
        return id;
    }
    public void setId(int id) {
        this.id = id;
    }
    public String getNo() {
        return no;
    }
    public void setNo(String no) {
        this.no = no;
    }
    public Person getPerson() {
        return person;
    }
    public void setPerson(Person person) {
        this.person = person;
    }
}
IDCard.hbm.xml




    
    
        
            
            
        
        
        
        
    
2、只需在Person类中添加IDCard对象, 在Person.hbm.xml中设置设置one-to-one关联, 设置property-ref=”person”表名有对端(IDCard)中的person对象维护关系 2.1、Person实体类
package com.chb.model;

public class Person  {
    private int id;
    private String name;
    private IDCard idCard;
    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 IDCard getIdCard() {
        return idCard;
    }
    public void setIdCard(IDCard idCard) {
        this.idCard = idCard;
    }



}
2.2、Person.hbm.xml




    
    
        
            
            
        
        
        
        
    
3、测试 3.1、one2one双向添加测试。
package com.chb.model;
import org.hibernate.Session;
import com.chb.hbUtils.HibernateUtils;
public class Test {
    @org.junit.Test
    public void test01() {
        Session session = null;
        //获取session
        session = HibernateUtils.getSession();
        //开启事务
        session.beginTransaction();

        //测试添加
        IDCard idCard = new IDCard();
        idCard.setNo("001");
        session.save(idCard);

        Person p = new Person();
        p.setName("chb");
        p.setIdCard(idCard);
        session.save(p);

        //提交事务
        session.getTransaction().commit();
        HibernateUtils.close();
    }
}
3.2、测试结果:是由IDCard端的person对象维护关系。所以通过p.setIdCard(idCard)就无效, 所以没有关联关系。

这里写图片描述

执行的sql
Hibernate: 

    create table t_id_card (
       c_id integer not null auto_increment,
        no varchar(255),
        p_id integer,
        primary key (c_id)
    ) engine=InnoDB
Hibernate: 

    create table t_person (
       p_id integer not null auto_increment,
        p_name varchar(255),
        primary key (p_id)
    ) engine=InnoDB
Hibernate: 

    alter table t_id_card 
       drop index UK_3dn8d7nqti422123arcwiwcni
Hibernate: 

    alter table t_id_card 
       add constraint UK_3dn8d7nqti422123arcwiwcni unique (p_id)
Hibernate: 

    alter table t_id_card 
       add constraint FKka2jsnojthq1ip58u1fqnlfwh 
       foreign key (p_id) 
       references t_person (p_id)
Hibernate: 
    insert 
    into
        t_id_card
        (no, p_id) 
    values
        (?, ?)
Hibernate: 
    insert 
    into
        t_person
        (p_name) 
    values
        (?)
4、先添加person, 在添加IDCard,
package com.chb.model;
import org.hibernate.Session;
import com.chb.hbUtils.HibernateUtils;
public class Test {
    @org.junit.Test
    public void test01() {
        Session session = null;
        //获取session
        session = HibernateUtils.getSession();
        //开启事务
        session.beginTransaction();

        //测试添加
        //先添加person
        Person p = new Person();
        p.setName("wx");
        session.save(p);
        //再添加IDCard
        IDCard idCard = new IDCard();
        idCard.setNo("002");
        idCard.setPerson(p);
        session.save(idCard);


        //提交事务
        session.getTransaction().commit();
        HibernateUtils.close();
    }
}
结果:

这里写图片描述

5、load测试, 从person端获取

这里写图片描述

6、load测试, 从idCard端获取

这里写图片描述

7、最佳实践

这里写图片描述

关注
打赏
1587549273
查看更多评论
立即登录/注册

微信扫码登录

0.0425s