zoukankan      html  css  js  c++  java
  • JPA学习---第十节:JPA中的一对一双向关联

    1、创建实体类,代码如下:

    代码清单1:

    package learn.jpa.entity;
    
    import javax.persistence.CascadeType;
    import javax.persistence.Column;
    import javax.persistence.Entity;
    import javax.persistence.GeneratedValue;
    import javax.persistence.Id;
    import javax.persistence.JoinColumn;
    import javax.persistence.OneToOne;
    
    @Entity
    public class Person {
    
        private int id;
        private String name;
        private IDCard idcard;
        
        public Person(){
            
        }
        
        public Person(String name){
            this.name = name;
        }
        
        @OneToOne(optional=false,cascade=CascadeType.ALL)
        @JoinColumn(name="idcard_id")
        public IDCard getIdcard() {
            return idcard;
        }
        public void setIdcard(IDCard idcard) {
            this.idcard = idcard;
        }
        @Id
        @GeneratedValue
        public int getId() {
            return id;
        }
        public void setId(int id) {
            this.id = id;
        }
        
        @Column(length=10,nullable=false)
        public String getName() {
            return name;
        }
        public void setName(String name) {
            this.name = name;
        }
    }

    代码清单2:

    package learn.jpa.entity;
    
    import javax.persistence.CascadeType;
    import javax.persistence.Column;
    import javax.persistence.Entity;
    import javax.persistence.GeneratedValue;
    import javax.persistence.Id;
    import javax.persistence.OneToOne;
    
    @Entity
    public class IDCard {
    
        private int id;
        private String cardno;
        private Person person;
        
        public IDCard(){
            
        }
        
        public IDCard(String cardno){
            this.cardno = cardno;
        }
        
        @OneToOne(mappedBy="idcard",cascade={CascadeType.PERSIST,CascadeType.MERGE,CascadeType.REFRESH},
                optional=false)
        public Person getPerson() {
            return person;
        }
        public void setPerson(Person person) {
            this.person = person;
        }
        @Id
        @GeneratedValue
        public int getId() {
            return id;
        }
        public void setId(int id) {
            this.id = id;
        }
        
        @Column(length=18, nullable=false)
        public String getCardno() {
            return cardno;
        }
        public void setCardno(String cardno) {
            this.cardno = cardno;
        }
        
    }

    2、测试代码:

    package learn.jpa.test;
    
    import static org.junit.Assert.*;
    
    import javax.persistence.EntityManager;
    import javax.persistence.EntityManagerFactory;
    import javax.persistence.Persistence;
    
    import learn.jpa.entity.IDCard;
    import learn.jpa.entity.Person;
    
    import org.junit.Test;
    
    public class OneToOneTest {
    
        /**
         * 测试数据库是否可以生成表
         */
        @Test
        public void test() {
            EntityManagerFactory factory = Persistence.createEntityManagerFactory("learn_jpa");
            factory.close();
        }
    
        @Test
        public void save(){
            EntityManagerFactory factory = Persistence.createEntityManagerFactory("learn_jpa");
            EntityManager em = factory.createEntityManager();
            em.getTransaction().begin();   // 开启事务
            
            Person person = new Person("hwl");
            IDCard idcard = new IDCard("435034189809170123");
            idcard.setPerson(person);
            person.setIdcard(idcard);
            em.persist(person);
            em.getTransaction().commit();
            em.close();
            factory.close();
        }
    }
  • 相关阅读:
    Dev 控件笔记1 repositoryItemLookUpEdit 控件
    装饰账务管理
    Tiptop ERP 采购运费一键分摊
    笔记:两数互相交换,不使用第三方变量
    .net core3.0 webapi搭建(一)
    【笔记】冒泡排序
    Mysql 几种常见的插入 Insert into,Replace Into,Insert ignore
    【转】IEnumerable接口的一个简单示例
    [转]从实例谈OOP、工厂模式和重构
    浅谈C#委托的用法-delegate[转]
  • 原文地址:https://www.cnblogs.com/hwlsniper/p/4090420.html
Copyright © 2011-2022 走看看