• jpa 一对一


    实体   Manager

    package entity;
    
    import javax.persistence.Column;
    import javax.persistence.Entity;
    import javax.persistence.FetchType;
    import javax.persistence.GeneratedValue;
    import javax.persistence.GenerationType;
    import javax.persistence.Id;
    import javax.persistence.JoinColumn;
    import javax.persistence.OneToOne;
    import javax.persistence.Table;
    @Table(name="managers")
    @Entity
    public class Manager {
        private Integer id;
        private String mgrName;
        
        /**
         * 一对一关联关系
         */
        private Department department;
        
        @GeneratedValue(strategy=GenerationType.AUTO)
        @Id
        public Integer getId() {
            return id;
        }
        public void setId(Integer id) {
            this.id = id;
        }
        @Column(name="MGR_NAME")
        public String getMgrName() {
            return mgrName;
        }
        public void setMgrName(String mgrName) {
            this.mgrName = mgrName;
        }
        
        /**
         * 对于不维护关系的一方(没有外外键的一方) ,使用@OneToOne 来进行映射,建议设置mappedBy=true
         * 同时,使用了mappedBy属性,不能同时使用@JoinColumn,否组会抛出异常
         * @return
         */
        //@JoinColumn(name="MGR_ID")
        @OneToOne(mappedBy="manager",fetch=FetchType.LAZY)  //不维护,使用对方的manager来维护
        public Department getDepartment() {
            return department;
        }
        public void setDepartment(Department department) {
            this.department = department;
        }
        
        
    }
    View Code

    实体   Department

    package entity;
    
    import static org.junit.Assert.assertTrue;
    
    import javax.persistence.Column;
    import javax.persistence.Entity;
    import javax.persistence.GeneratedValue;
    import javax.persistence.Id;
    import javax.persistence.JoinColumn;
    import javax.persistence.OneToOne;
    import javax.persistence.Table;
    @Table(name="department")
    @Entity
    public class Department {
        private Integer id;
        private  String deptName;
        private Manager manager;
        
        @GeneratedValue
        @Id
        public Integer getId() {
            return id;
        }
        public void setId(Integer id) {
            this.id = id;
        }
        
        /**
         * 使用@OnetoOne 映射一对一的关联关系
         * 如要在当前表中添加主键。则需要使用@JoinColumn ,说明,一对一关系,需要添加unique=true 
         * @return
         */
        @JoinColumn(name="MGR_ID",unique=true    )   
        @OneToOne
        public Manager getManager() {
            return manager;
        }
        public void setManager(Manager manager) {
            this.manager = manager;
        }
        @Column(name="DEPT_NAME")
        public String getDeptName() {
            return deptName;
        }
        public void setDeptName(String deptName) {
            this.deptName = deptName;
        }
        
        
        
    }
    View Code

     测试  OneToOnetest

    package test;
    
    import javax.persistence.EntityManager;
    import javax.persistence.EntityManagerFactory;
    import javax.persistence.EntityTransaction;
    import javax.persistence.FetchType;
    import javax.persistence.Persistence;
    
    import org.junit.After;
    import org.junit.Before;
    import org.junit.Test;
    
    import entity.Department;
    import entity.Manager;
    
    public class OneToOneTest {
    
        private EntityManagerFactory entityManagerFactory;
        private EntityManager entityManager;
        private EntityTransaction entityTransaction;
    
        @Before
        public void init() {
            entityManagerFactory = Persistence.createEntityManagerFactory("JPA");
            entityManager = entityManagerFactory.createEntityManager();
            entityTransaction = entityManager.getTransaction();
            entityTransaction.begin();
        }
    
        @After
        public void distory() {
            entityTransaction.commit();
            entityManager.close();
            entityManagerFactory.close();
         }
        
        /**
         * 若查找不维护的一方,默认也是通过左外链接获取其关联对象
         * 可以通过  @OneToOne(fetch=FetchType.LAZY)来修改,
         *但是依然会发送sql语句来初始化其关联对象 ,不建议修改fetch属性
         */
       @Test
        public void testfind1(){
           Manager manager = entityManager.find(Manager.class, 22);
           System.out.println(manager.getMgrName());
           Department department = manager.getDepartment();
           System.out.println(department.getDeptName());
       }
       /**
        * 若查找维护的一方,默认也是通过左外链接获取其关联对象
        *可以通过  @OneToOne(fetch=FetchType.LAZY)来修改
        */
       @Test
       public void testfind2(){
           Department department = entityManager.find(Department.class, 21);
           System.out.println(department.getDeptName());
           System.out.println(department.getManager().getMgrName());
       }
        /**
         * 双向一对一关系,建议先保存不维护关系的一方(没有外键的),这样不会产生update语句
         */
        @Test
        public void testPersistence() {
            Manager manager = new Manager();
            manager.setMgrName("AAA");
            Department department = new Department();
            department.setDeptName("BBB");
            // set associate 设置关联
            manager.setDepartment(department);
            department.setManager(manager);
            // 双向一对一关系,建议先保存不维护关系的一方(没有外键的),这样不会产生update语句
            entityManager.persist(manager);
            entityManager.persist(department);
    
        }
    
    }
    View Code
  • 相关阅读:
    python爬虫如何提高效率
    对 js加密数据进行爬取和解密
    爬虫之数据解析
    requests模块的基本使用
    python的零碎知识
    Django中多表关联的展示问题:
    ModelForm的基本用法:
    websocket的应用---Django
    DOM
    BOM
  • 原文地址:https://www.cnblogs.com/lshan/p/8647064.html
Copyright © 2020-2023  润新知