zoukankan      html  css  js  c++  java
  • hibernate 之 关联映射的基于主键的一对一双向关联

    1.人和身份证是一个一对一的关系,他们的表结构为:

    2. 类结构:IdCard.java

    public class IdCard {
        private String id;
        private String address;
        private Person person;
        public IdCard() {
        }
        public IdCard(String id, String address) {
            super();
            this.id = id;
            this.address = address;
        }
        public String getId() {
            return id;
        }
        public void setId(String id) {
            this.id = id;
        }
        public String getAddress() {
            return address;
        }
        public void setAddress(String address) {
            this.address = address;
        }
        public Person getPerson() {
            return person;
        }
        public void setPerson(Person person) {
            this.person = person;
        }
    }

    Person.java

    public class Person {
        private String id;
        private String name;
        private int age;
        private IdCard idCard;
        public Person() {
        }
        public Person(String name, int age) {
            super();
            this.name = name;
            this.age = age;
        }
        public String getId() {
            return id;
        }
        public void setId(String id) {
            this.id = id;
        }
        public String getName() {
            return name;
        }
        public void setName(String name) {
            this.name = name;
        }
        public int getAge() {
            return age;
        }
        public void setAge(int age) {
            this.age = age;
        }
        public IdCard getIdCard() {
            return idCard;
        }
        public void setIdCard(IdCard idCard) {
            this.idCard = idCard;
        }
        
    }

    3. 映射文件  IdCard.hbm.xml

    <hibernate-mapping>
        <class name="cn.sxt.vo.IdCard" table="t_idCard">
            <id name="id">
                <generator class="assigned"></generator>
            </id>
            <property name="address"/>
            <one-to-one name="person"/>
        </class>
    </hibernate-mapping>

    Person.hbm.xml

    <hibernate-mapping>
        <class name="cn.sxt.vo.Person" table="t_person">
            <id name="id">
                <generator class="foreign">
                    <param name="property">idCard</param>
                </generator>
            </id>
            <property name="name"/>
            <property name="age"/>
            <one-to-one name="idCard" constrained="true"/>
        </class>
    </hibernate-mapping>

    4. 测试:

    public class HibernateTest {
        private Session session=null;
        @Before
        public void setUp(){
            session = HibernateUtil.getSession();
        }
        @After
        public void tearDown(){
            HibernateUtil.close();
        }
        @Test
        public void testCreateDB(){
            Configuration cfg = new Configuration().configure();
            SchemaExport export = new SchemaExport(cfg);
            //第一个参数  是否打印  数据库脚本
            //第二个参数 是否将脚本导入数据库执行
            export.create(true, true);
        }
        @Test
        public void testInit(){
            Transaction tx = null;
            try {
                tx = session.beginTransaction();
                IdCard card1 = new IdCard("1101","北京昌平");
                IdCard card2 = new IdCard("1102", "北京海淀");
                Person p1 = new Person("张三",22);
                p1.setIdCard(card1);
                Person p2 = new Person("李四",23);
                p2.setIdCard(card2);
                
                session.save(card1);
                session.save(card2);
                session.save(p1);
                session.save(p2);
                
                tx.commit();
                
            } catch (Exception e) {
                if(tx!=null)
                    tx.rollback();
            }
        }
        @Test
        public void testGet(){
            Person p1 = (Person)session.get(Person.class, "1101");
            System.out.println(p1.getName()+"---"+p1.getAge()+"----"+p1.getIdCard().getAddress());
            System.out.println("------------------------");
            IdCard card = (IdCard)session.get(IdCard.class, "1101");
            System.out.println(card.getId()+"----"+card.getAddress()+"----"+card.getPerson().getName());
        }    
    }
  • 相关阅读:
    C++笔记(2018/2/6)
    2017级面向对象程序设计寒假作业1
    谁是你的潜在朋友
    A1095 Cars on Campus (30)(30 分)
    A1083 List Grades (25)(25 分)
    A1075 PAT Judge (25)(25 分)
    A1012 The Best Rank (25)(25 分)
    1009 说反话 (20)(20 分)
    A1055 The World's Richest(25 分)
    A1025 PAT Ranking (25)(25 分)
  • 原文地址:https://www.cnblogs.com/forever2h/p/6737492.html
Copyright © 2011-2022 走看看