zoukankan      html  css  js  c++  java
  • Hibernate 注解(Annotations 二)一对一双向注解

    注解(Annotation),也叫元数据。一种代码级别的说明。它是JDK1.5及以后版本引入的一个特性,与类、接口、枚举是在同一个层次。它可以声明在包、类、字段、方法、局部变量、方法参数等的前面,用来对这些元素进行说明,注释。

    接下来我们讲解一下一对一的注解配置:

    上一篇文档已经详细解说了各个注解的含义和作用,在这里就不详细说明了,直接使用了。

    1.创建两个实体类(Student类和IdCard类)

       Student类

    package cn.onetoone.entity;
    
    import javax.persistence.*;
    
    /**
     * Created by accp on 2017/2/8.
     */
    @Entity
    @Table(name = "Student")
    public class Student {
        @Id
        @GeneratedValue
        private Integer sid;
        @Column
        private String sname;
        @OneToOne(cascade = {CascadeType.ALL})
        @JoinColumn(name = "cid")
        private IdCard idCard;
    
        public Integer getSid() {
            return sid;
        }
    
        public void setSid(Integer sid) {
            this.sid = sid;
        }
    
        public String getSname() {
            return sname;
        }
    
        public void setSname(String sname) {
            this.sname = sname;
        }
    
        public IdCard getIdCard() {
            return idCard;
        }
    
        public void setIdCard(IdCard idCard) {
            this.idCard = idCard;
        }
    }

    IdCard类:

    package cn.onetoone.entity;
    
    import javax.persistence.*;
    
    /**
     * Created by accp on 2017/2/8.
     */
    @Entity
    @Table
    public class IdCard {
        @Id
        @GeneratedValue
        private Integer cid;
        @Column
        private String cname;
        @OneToOne(mappedBy = "idCard")
        //把维护权交给Student
        private Student stu;
    
        public Integer getCid() {
            return cid;
        }
    
        public void setCid(Integer cid) {
            this.cid = cid;
        }
    
        public String getCname() {
            return cname;
        }
    
        public void setCname(String cname) {
            this.cname = cname;
        }
    
        public Student getStu() {
            return stu;
        }
    
        public void setStu(Student stu) {
            this.stu = stu;
        }
    }

    2.在大配置中需要添加:

     <mapping class="cn.onetoone.entity.Student"/>
     <mapping class="cn.onetoone.entity.IdCard"/>

    3.测试类:

     

    package cn.onetoone.test;
    
    import cn.onetoone.entity.IdCard;
    import cn.onetoone.entity.Student;
    import org.hibernate.Session;
    import org.hibernate.SessionFactory;
    import org.hibernate.Transaction;
    import org.hibernate.cfg.Configuration;
    import org.junit.After;
    import org.junit.Before;
    import org.junit.Test;
    
    /**
     * Created by accp on 2017/2/8.
     */
    public class OneToOneTest {
        Configuration cfg;
        Session session;
        Transaction tx;
        @Before
        public void mybefore(){
            cfg=new Configuration().configure();
            SessionFactory factory=cfg.buildSessionFactory();
            session=factory.openSession();
            tx=session.beginTransaction();
        }
    
        @After
        public void myafter(){
            tx.commit();
            session.close();
        }
    
        @Test
        public void add(){
            Student stu=new Student();
            stu.setSname("李四");
    
            IdCard idCard=new IdCard();
            idCard.setCid(1234566789);
            idCard.setCname("身份证");
    
            stu.setIdCard(idCard);
            session.save(idCard);
            session.save(stu);
    
        }
    }

    生成的sql:

    Hibernate: 
        insert 
        into
            IdCard
            (cname, cid) 
        values
            (?, ?)
    Hibernate: 
        insert 
        into
            Student
            (cid, sname, sid) 
        values
            (?, ?, ?)

    数据库数据:

    Student表                           IdCard表

  • 相关阅读:
    英文哲理短句
    经历的一次诈骗
    英文哲理短句
    反思对待新人的方式
    Java 开源报表制作
    现在开始写字
    关于Visual C++ 6.0的调试技巧和经验总结
    一步一步教你实现CTreeCtrl 自绘
    VC中动态加载ODBC解决方法
    VC++程序编译链接的原理与过程
  • 原文地址:https://www.cnblogs.com/wl0000-03/p/6405115.html
Copyright © 2011-2022 走看看