zoukankan      html  css  js  c++  java
  • jpa单向一对一关系外键映射

    项目结构:

    Wife

    
    package auth.model;
    
    import javax.persistence.Column;
    import javax.persistence.Entity;
    import javax.persistence.GeneratedValue;
    import javax.persistence.GenerationType;
    import javax.persistence.Id;
    import javax.persistence.Table;
    
    @Entity
    @Table(name="wife")
    public class Wife {
    	private int id;
    	private String name;
    	private int age;
    	@Id
    	@GeneratedValue(strategy=GenerationType.AUTO)
    	@Column(name="id")
    	public int getId() {
    		return id;
    	}
    	public void setId(int id) {
    		this.id = id;
    	}
    	@Column(name="name")
    	public String getName() {
    		return name;
    	}
    	public void setName(String name) {
    		this.name = name;
    	}
    	@Column(name="age")
    	public int getAge() {
    		return age;
    	}
    	public void setAge(int age) {
    		this.age = age;
    	}
    }
    
    

    Husband

    
    package auth.model;
    
    import javax.persistence.CascadeType;
    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;
    
    @Entity
    @Table(name="husband")
    public class Husband {
    	private int id;
    	private String name;
    	private int age;
    	private Wife wife;
    	@Id
    	@GeneratedValue(strategy=GenerationType.AUTO)
    	@Column(name="id")
    	public int getId() {
    		return id;
    	}
    	public void setId(int id) {
    		this.id = id;
    	}
    	@Column(name="name")
    	public String getName() {
    		return name;
    	}
    	public void setName(String name) {
    		this.name = name;
    	}
    	@Column(name="age")
    	public int getAge() {
    		return age;
    	}
    	public void setAge(int age) {
    		this.age = age;
    	}
    	//注意:这个husband的id要和wife的id一样,表的主键同时是另一张表的外键,不然无法关联
    	@OneToOne(cascade=CascadeType.ALL,fetch=FetchType.LAZY,targetEntity=Wife.class)
    	@JoinColumn(name="id", unique=true, nullable=false, updatable=false)
    	public Wife getWife() {
    		return wife;
    	}
    	public void setWife(Wife wife) {
    		this.wife = wife;
    	}
    }
    
    

    DAO:

    
    package auth.dao;
    
    import org.springframework.data.jpa.repository.JpaRepository;
    
    import auth.model.Husband;
    
    public interface HusbandRepository extends JpaRepository<Husband, Integer>{
    }
    
    package auth.dao;
    
    import org.springframework.data.jpa.repository.JpaRepository;
    
    import auth.model.Wife;
    
    public interface WifeRepository extends JpaRepository<Wife, Integer>{
    
    }
    
    

    UserController

    
    package auth.controller;
    
    import org.slf4j.Logger;
    import org.slf4j.LoggerFactory;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.stereotype.Service;
    
    import com.alibaba.fastjson.JSONObject;
    
    import auth.dao.HusbandRepository;
    import auth.dao.WifeRepository;
    import auth.model.Husband;
    import auth.model.Wife;
    @Service
    public class UserController {
    	private Logger log=LoggerFactory.getLogger(this.getClass());
    	@Autowired
    	private HusbandRepository husDao;
    	@Autowired
    	private WifeRepository wifeDao;
    	public void addUser(){
    		Husband hus=new Husband();
    		hus.setAge(23);
    		hus.setName("wy");
    		Wife wife=new Wife();
    		wife.setName("xxt");
    		wife.setAge(22);
    		hus.setWife(wife);
    		husDao.save(hus);
    	}
    	public void deleteUser(){
    		husDao.delete(6);
    	}
    	public void updateUser(){
    		Husband hus=husDao.findOne(7);
    		hus.setName("ws");
    		hus.getWife().setName("updatelcy");
    		husDao.save(hus);
    	}
    	public String queryUser(){
    		Husband husband=husDao.findOne(8);
    		return JSONObject.toJSONString(husband);
    	}
    }
    
    

    Tests

    
    package spring;
    
    import org.junit.Test;
    import org.springframework.beans.factory.annotation.Autowired;
    
    import auth.controller.UserController;
    
    public class Tests extends Base{
    	@Autowired
    	private UserController con;
    	@Test
    	public void addUser(){
    		con.addUser();
    	}
    	@Test
    	public void deleteUser(){
    		con.deleteUser();
    	}
    	@Test
    	public void updateUser(){
    		con.updateUser();
    	}
    	@Test
    	public void queryUser(){
    		String result=con.queryUser();
    		System.out.println(result);
    	}
    
    }
    
    

    运行过程:

    add

    2017-05-25 12:59:21,930 DEBUG [org.hibernate.SQL:109] - 
        insert 
        into
            husband
            (age, name) 
        values
            (?, ?)
    2017-05-25 12:59:21,981 DEBUG [org.hibernate.id.IdentifierGeneratorHelper:94] - Natively generated identity: 6
    2017-05-25 12:59:21,990 DEBUG [org.hibernate.engine.spi.ActionQueue:196] - Executing identity-insert immediately
    2017-05-25 12:59:21,991 DEBUG [org.hibernate.SQL:109] - 
        insert 
        into
            wife
            (age, name) 
        values
            (?, ?)

    delete
    delete 
        from
            wife 
        where
            id=?
    2017-05-25 14:55:37,618 DEBUG [org.hibernate.SQL:109] - 
        delete 
        from
            husband 
        where
            id=?


    update
    update
            wife 
        set
            age=?,
            name=? 
        where
            id=?
    2017-05-25 14:46:32,037 DEBUG [org.hibernate.SQL:109] - 
        update
            husband 
        set
            age=?,
            name=? 
        where
            id=?

    query
    select
            husband0_.id as id1_0_0_,
            husband0_.age as age2_0_0_,
            husband0_.name as name3_0_0_ 
        from
            husband husband0_ 
        where
            husband0_.id=?
    2017-05-25 14:48:24,685 DEBUG [org.hibernate.loader.plan.exec.process.internal.ResultSetProcessorImpl:127] - Starting ResultSet row #0
    2017-05-25 14:48:24,687 DEBUG [org.hibernate.loader.plan.exec.process.internal.EntityReferenceInitializerImpl:142] - On call to EntityIdentifierReaderImpl#resolve, EntityKey was already known; should only happen on root returns with an optional identifier specified
    2017-05-25 14:48:24,705 DEBUG [org.hibernate.engine.internal.TwoPhaseLoad:160] - Resolving associations for [auth.model.Husband#8]
    2017-05-25 14:48:24,708 DEBUG [org.hibernate.SQL:109] - 
        select
            wife0_.id as id1_1_0_,
            wife0_.age as age2_1_0_,
            wife0_.name as name3_1_0_ 
        from
            wife wife0_ 
        where
            wife0_.id=?

    查询运行结果:

    {"age":23,"id":8,"name":"wy","wife":{"age":22,"id":8,"name":"xxt"}}
  • 相关阅读:
    【POJ】3243 Clever Y
    【BZOJ】3916: [Baltic2014]friends
    【URAL】1960. Palindromes and Super Abilities
    【BZOJ】3621: 我想那还真是令人高兴啊
    【BZOJ】2286: [Sdoi2011消耗战
    【POJ】2891 Strange Way to Express Integers
    鬼畜的多项式
    【CF】438E. The Child and Binary Tree
    【BZOJ】3456: 城市规划
    【POJ】1811 Prime Test
  • 原文地址:https://www.cnblogs.com/JAYIT/p/6897879.html
Copyright © 2011-2022 走看看