zoukankan      html  css  js  c++  java
  • hibernate--联合主键--annotation

    有3种方式:

    1.@Embeddedable

    2.@EmbeddedId

    3. @IdClass

    2,3 最常用

    一, @Embeddedable

    1.新建TeacherPK.java, 加入@Embeddable:

    package com.bjsxt.hibernate;
    
    import javax.persistence.Embeddable;
     
    @Embeddable 
    public class TeacherPK implements java.io.Serializable{
        private int id;
        private String name;
        public int getId() {
            return id;
        }
        public void setId(int id) {
            this.id = id;
        }
        public String getName() {
            return name;
        }
        public void setName(String name) {
            this.name = name;
        }
      
    }
    

    2. 重写Teacher.java, 加入pk对象, 并设置@Id:

    package com.bjsxt.hibernate;
    
    import javax.persistence.Entity;
    import javax.persistence.GeneratedValue;
    import javax.persistence.GenerationType;
    import javax.persistence.Id;
    import javax.persistence.Table;
    
    
    @Entity
    @Table(name="_Teacher")
    public class Teacher {
    	private TeacherPK pk;
    	@Id
    	public TeacherPK getPk() {
    		return pk;
    	}
    	public void setPk(TeacherPK pk) {
    		this.pk = pk;
    	}
    	private String title;
    	
    	
    	public String getTitle() {
    		return title;
    	}
    	public void setTitle(String title) {
    		this.title = title;
    	}
    }
    

    3. 重写junit测试方法:

    @Test
    	public void testTeacherSave() {
    		TeacherPK pk=new TeacherPK();
    		pk.setId(1);
    		pk.setName("lisi");
    	
    		
    		Teacher t =new Teacher();
    		t.setPk(pk);
    		t.setTitle("higfdfsdfsadh");
    		
    		
    		Session session =  sf.openSession();
    		session.beginTransaction();
    		session.save(t);
    		session.getTransaction().commit();
    		session.close();	
    	}
    

    二: @EmbeddedId

    1. 去掉TeacherPK.java的@Embeddable:

    package com.bjsxt.hibernate;
    
    import javax.persistence.Embeddable;
     
    public class TeacherPK implements java.io.Serializable{
        private int id;
        private String name;
        public int getId() {
            return id;
        }
        public void setId(int id) {
            this.id = id;
        }
        public String getName() {
            return name;
        }
        public void setName(String name) {
            this.name = name;
        }
      
    }
    

      

    2. Teacher.java里@Id的地方改成@EmbeddedId

    package com.bjsxt.hibernate;
    
    import javax.persistence.EmbeddedId;
    import javax.persistence.Entity;
    import javax.persistence.GeneratedValue;
    import javax.persistence.Id;
    import javax.persistence.IdClass;
    import javax.persistence.Table;
    
    
    @Entity
    @Table(name="_Teacher")
    //@IdClass(value=TeacherPK.class)
    public class Teacher {
    	private TeacherPK pk = new TeacherPK();
    	@EmbeddedId
    	public TeacherPK getPk() {
    		return pk;
    	}
    	public void setPk(TeacherPK pk) {
    		this.pk = pk;
    	}
    	private String title;	
    
    	public String getTitle() {
    		return title;
    	}
    	public void setTitle(String title) {
    		this.title = title;
    	}
    }
    

      

    3. test方法:

    @Test
    	public void testTeacherSave() {
    		TeacherPK pk=new TeacherPK();
    		pk.setId(2);
    		pk.setName("lisi");
    	
    		
    		Teacher t =new Teacher();
    		t.setPk(pk);
    		t.setTitle("higfdfsdfsadh");
    		
    		
    		Session session =  sf.openSession();
    		session.beginTransaction();
    		session.save(t);
    		session.getTransaction().commit();
    		session.close();	
    	}
    

      

    三, @IdClass

    1. TeacherPK.java:

    package com.bjsxt.hibernate;
    
    import javax.persistence.Embeddable;
     
    public class TeacherPK implements java.io.Serializable{
        private int id;
        private String name;
        public int getId() {
            return id;
        }
        public void setId(int id) {
            this.id = id;
        }
        public String getName() {
            return name;
        }
        public void setName(String name) {
            this.name = name;
        }
      
    }
    

    2. Teacher.java里类前加入IdClass:

    package com.bjsxt.hibernate;
    
    import javax.persistence.Entity;
    import javax.persistence.GeneratedValue;
    import javax.persistence.Id;
    import javax.persistence.IdClass;
    import javax.persistence.Table;
    
    
    @Entity
    @Table(name="_Teacher")
    @IdClass(value=TeacherPK.class)
    public class Teacher {
    	private int id;
    	private String name;
    	private String title;
    	
    	@Id
    	@GeneratedValue
    	public int getId() {
    		return id;
    	}
    	public void setId(int id) {
    		this.id = id;
    	}
    
    	public String getName() {
    		return name;
    	}
    	public void setName(String name) {
    		this.name = name;
    	}
    	public String getTitle() {
    		return title;
    	}
    	public void setTitle(String title) {
    		this.title = title;
    	}
    }
    

    3. junit的测试方法;

    @Test
    	public void testTeacherSave() {
    		Teacher t =new Teacher();
    		t.setId(1);
    		t.setName("zhagnsan");
    		t.setTitle("higfdfsdfsadh");
    		
    		
    		Session session =  sf.openSession();
    		session.beginTransaction();
    		session.save(t);
    		session.getTransaction().commit();
    		session.close();	
    	}
    

      

  • 相关阅读:
    【剑指Offer-分解让复杂问题简单化】面试题38:字符串的排列
    【剑指Offer-分解让复杂问题简单化】面试题37:序列化二叉树
    【剑指Offer-分解让复杂问题简单化】面试题35:复杂链表的复制
    【剑指Offer-举例让抽象问题具体化】面试题34:二叉树中和为某一值的路径
    Git操作时遇到的一些问题和相应的处理方式
    Git分支规范说明
    敏捷的原则和价值观
    MongoDB批量更新和批量插入的方式
    请求地址中含有特殊字符#时如何有效处理
    IntelliJ IDEA Ultimate 6.2 版本免费试用期过期后如何破解
  • 原文地址:https://www.cnblogs.com/wujixing/p/5413924.html
Copyright © 2011-2022 走看看