zoukankan      html  css  js  c++  java
  • Hibernate(四)

    注解高级(原文再续书接上一回)

    6.单向关联

    即单向配置注解关联信息

      单向关联的数据库生成的表与双向关联生成的表是相同的,只是在查询的时候不同。双向是双方都可以查询各自的信息,而单向只有加了注解的表可以查询另一方的信息!!!一对多以及多对一是同一概念,只是参考系不一样。一般会由多的一端来维护生成外键,这样效率更高;而作为一的那端也可以作为维护生成外键,但是效率普遍较低,一般不推荐使用。需要用哪种关联,归根到底还是要看实际业务需求。

    A.一对一

     主表不需要配置注解信息,而从表需要

     1 package com.rong.entity;
     2 
     3 import javax.persistence.Entity;
     4 import javax.persistence.GeneratedValue;
     5 import javax.persistence.GenerationType;
     6 import javax.persistence.Id;
     7 import javax.persistence.Table;
     8 
     9 @Entity
    10 @Table(name="t_citizen")
    11 public class Citizen {
    12     @Id
    13     @GeneratedValue(strategy=GenerationType.AUTO)
    14     private int id;
    15     private String name;
    16     private int sex; 
    17     public int getId() {
    18         return id;
    19     }
    20     public void setId(int id) {
    21         this.id = id;
    22     }
    23     public String getName() {
    24         return name;
    25     }
    26     public void setName(String name) {
    27         this.name = name;
    28     }
    29     public int getSex() {
    30         return sex;
    31     }
    32     public void setSex(int sex) {
    33         this.sex = sex;
    34     }
    35     @Override
    36     public String toString() {
    37         return "Citizen [id=" + id + ", name=" + name + ", sex=" + sex + "]";
    38     }
    39 }
     1 package com.rong.entity;
     2 
     3 import javax.persistence.Entity;
     4 import javax.persistence.FetchType;
     5 import javax.persistence.GeneratedValue;
     6 import javax.persistence.GenerationType;
     7 import javax.persistence.Id;
     8 import javax.persistence.JoinColumn;
     9 import javax.persistence.OneToOne;
    10 import javax.persistence.Table;
    11 
    12 @Entity
    13 @Table(name="t_idcard")
    14 public class IDcard {
    15     @Id
    16     @GeneratedValue(strategy=GenerationType.AUTO)
    17     private int cardid;
    18     private String name;
    19     private String addr;
    20     @OneToOne(targetEntity=Citizen.class,fetch=FetchType.LAZY) // 维护关联关系(从表)
    21     @JoinColumn(name="t_id",referencedColumnName="id",unique=true)//生成外键列,参考citizen的id
    22     private Citizen citizen;
    23     public int getCardid() {
    24         return cardid;
    25     }
    26     public void setCardid(int cardid) {
    27         this.cardid = cardid;
    28     }
    29     public String getName() {
    30         return name;
    31     }
    32     public void setName(String name) {
    33         this.name = name;
    34     }
    35     public String getAddr() {
    36         return addr;
    37     }
    38     public void setAddr(String addr) {
    39         this.addr = addr;
    40     }
    41     public Citizen getCitizen() {
    42         return citizen;
    43     }
    44     public void setCitizen(Citizen citizen) {
    45         this.citizen = citizen;
    46     }
    47     @Override
    48     public String toString() {
    49         return "IDcard [cardid=" + cardid + ", name=" + name + ", addr=" + addr + ", citizen=" + citizen + "]";
    50     }
    51 }
     1 package com.rong.test;
     2 
     3 import org.hibernate.Session;
     4 import org.hibernate.SessionFactory;
     5 import org.hibernate.Transaction;
     6 import org.hibernate.boot.registry.StandardServiceRegistryBuilder;
     7 import org.hibernate.cfg.Configuration;
     8 import org.hibernate.service.ServiceRegistry;
     9 import org.junit.Test;
    10 
    11 import com.rong.entity.Citizen;
    12 import com.rong.entity.IDcard;
    13 
    14 public class HibernateTest {
    15     @Test
    16     public void test1(){
    17         Configuration configuration=new Configuration().configure();
    18         ServiceRegistry serviceRegistry=new StandardServiceRegistryBuilder().applySettings(configuration.getProperties()).build();
    19         SessionFactory sessionFactory = configuration.buildSessionFactory(serviceRegistry);
    20         Session session = sessionFactory.openSession();
    21         Transaction transaction = session.beginTransaction();
    22 
    23         Citizen citizen=new Citizen();
    24         citizen.setName("rjl");
    25         citizen.setSex(0);
    26         IDcard iDcard=new IDcard();
    27         iDcard.setName("rjl");
    28         iDcard.setAddr("中国");
    29         iDcard.setCitizen(citizen);
    30         
    31         session.save(citizen);
    32         session.save(iDcard);
    33         //查询
    34         Citizen findCitizen=(Citizen) session.get(Citizen.class, 1);
    35         //单向关联中主表查不到另一端的数据信息,只能查找自身信息
    36         System.out.println(findCitizen.getId()+":"+findCitizen.getName());
    37         IDcard findIDcard=(IDcard)session.get(IDcard.class, 1);
    38         //单向关联中从表不仅能查找自身信息,还可以查到另一端的数据信息
    39         System.out.println(findIDcard.getCardid()+":"+findIDcard.getAddr()+findIDcard.getCitizen());
    40         transaction.commit();
    41         session.close();
    42         sessionFactory.close();
    43     }
    44 }

    B.一对多

     1 package com.rong.entity;
     2 
     3 import java.util.HashSet;
     4 import java.util.Set;
     5 
     6 import javax.persistence.CascadeType;
     7 import javax.persistence.Entity;
     8 import javax.persistence.FetchType;
     9 import javax.persistence.GeneratedValue;
    10 import javax.persistence.GenerationType;
    11 import javax.persistence.Id;
    12 import javax.persistence.JoinColumn;
    13 import javax.persistence.OneToMany;
    14 import javax.persistence.Table;
    15 
    16 @Entity
    17 @Table(name="t_teacher")
    18 public class Teacher {
    19     @Id
    20     @GeneratedValue(strategy=GenerationType.AUTO)
    21     private int tid;
    22     private String tname;
    23     //一的一端
    24     @OneToMany(targetEntity=Student.class
    25             ,fetch=FetchType.LAZY
    26             ,cascade=CascadeType.REMOVE
    27             ,orphanRemoval=true)
    28     @JoinColumn(name="t_id",referencedColumnName="tid")
    29     private Set<Student> stu=new HashSet<Student>();
    30     public int getTid() {
    31         return tid;
    32     }
    33     public void setTid(int tid) {
    34         this.tid = tid;
    35     }
    36     public String getTname() {
    37         return tname;
    38     }
    39     public void setTname(String tname) {
    40         this.tname = tname;
    41     }
    42     public Set<Student> getStu() {
    43         return stu;
    44     }
    45     public void setStu(Set<Student> stu) {
    46         this.stu = stu;
    47     }
    48     @Override
    49     public String toString() {
    50         return "Teacher [tid=" + tid + ", tname=" + tname + ", stu=" + stu + "]";
    51     }
    52 }
     1 package com.rong.entity;
     2 
     3 import javax.persistence.Entity;
     4 import javax.persistence.GeneratedValue;
     5 import javax.persistence.GenerationType;
     6 import javax.persistence.Id;
     7 import javax.persistence.Table;
     8 
     9 @Entity
    10 @Table(name="t_student")
    11 public class Student {
    12     @Id
    13     @GeneratedValue(strategy=GenerationType.AUTO)
    14     private int sid;
    15     private String sname;
    16     public int getSid() {
    17         return sid;
    18     }
    19     public void setSid(int sid) {
    20         this.sid = sid;
    21     }
    22     public String getSname() {
    23         return sname;
    24     }
    25     public void setSname(String sname) {
    26         this.sname = sname;
    27     }
    28     @Override
    29     public String toString() {
    30         return "Student [sid=" + sid + ", sname=" + sname + "]";
    31     }
    32 }
     1 package com.rong.test;
     2 
     3 import java.util.Set;
     4 
     5 import org.hibernate.Session;
     6 import org.hibernate.SessionFactory;
     7 import org.hibernate.Transaction;
     8 import org.hibernate.boot.registry.StandardServiceRegistryBuilder;
     9 import org.hibernate.cfg.Configuration;
    10 import org.hibernate.service.ServiceRegistry;
    11 import org.junit.Test;
    12 
    13 import com.rong.entity.Citizen;
    14 import com.rong.entity.IDcard;
    15 import com.rong.entity.Student;
    16 import com.rong.entity.Teacher;
    17 
    18 public class HibernateTest {
    19     @Test
    20     public void test1(){
    21         Configuration configuration=new Configuration().configure();
    22         ServiceRegistry serviceRegistry=new StandardServiceRegistryBuilder().applySettings(configuration.getProperties()).build();
    23         SessionFactory sessionFactory = configuration.buildSessionFactory(serviceRegistry);
    24         Session session = sessionFactory.openSession();
    25         Transaction transaction = session.beginTransaction();
    26 
    27         Teacher teacher=new Teacher();
    28         teacher.setTname("夏雨");
    29         Student student1=new Student();
    30         student1.setSname("曹操");
    31         Student student2=new Student();
    32         student2.setSname("刘备");
    33         Set<Student> set = teacher.getStu();
    34         set.add(student1);
    35         set.add(student2);
    36         session.save(student1);
    37         session.save(student2);
    38         session.save(teacher);
    39         //
    40         Student stu=(Student) session.get(Student.class, 1);
    41         System.out.println(stu.getSid()+":"+stu.getSname());
    42         
    43         //
    44         Teacher tea=(Teacher) session.get(Teacher.class, 1);
    45         System.out.println(tea.getTname()+tea.getStu());
    46         transaction.commit();
    47         session.close();
    48         sessionFactory.close();
    49     }
    50 }

    C.多对一

     1 package com.rong.entity;
     2 
     3 import javax.persistence.Entity;
     4 import javax.persistence.GeneratedValue;
     5 import javax.persistence.GenerationType;
     6 import javax.persistence.Id;
     7 import javax.persistence.Table;
     8 
     9 @Entity
    10 @Table(name="t_teacher")
    11 public class Teacher {
    12     @Id
    13     @GeneratedValue(strategy=GenerationType.AUTO)
    14     private int tid;
    15     private String tname;
    16     
    17     public int getTid() {
    18         return tid;
    19     }
    20     public void setTid(int tid) {
    21         this.tid = tid;
    22     }
    23     public String getTname() {
    24         return tname;
    25     }
    26     public void setTname(String tname) {
    27         this.tname = tname;
    28     }
    29     @Override
    30     public String toString() {
    31         return "Teacher [tid=" + tid + ", tname=" + tname + "]";
    32     }
    33 }
     1 package com.rong.entity;
     2 
     3 import javax.persistence.CascadeType;
     4 import javax.persistence.Entity;
     5 import javax.persistence.FetchType;
     6 import javax.persistence.GeneratedValue;
     7 import javax.persistence.GenerationType;
     8 import javax.persistence.Id;
     9 import javax.persistence.JoinColumn;
    10 import javax.persistence.ManyToOne;
    11 import javax.persistence.Table;
    12 
    13 @Entity
    14 @Table(name="t_student")
    15 public class Student {
    16     @Id
    17     @GeneratedValue(strategy=GenerationType.AUTO)
    18     private int sid;
    19     private String sname;
    20     //多的一端
    21     @ManyToOne(targetEntity=Teacher.class
    22                 ,fetch=FetchType.LAZY
    23                 ,cascade=CascadeType.REMOVE
    24                 )
    25     @JoinColumn(name="t_id",referencedColumnName="tid")
    26     private Teacher teach;
    27     public int getSid() {
    28         return sid;
    29     }
    30     public void setSid(int sid) {
    31         this.sid = sid;
    32     }
    33     public String getSname() {
    34         return sname;
    35     }
    36     public void setSname(String sname) {
    37         this.sname = sname;
    38     }
    39     public Teacher getTeach() {
    40         return teach;
    41     }
    42     public void setTeach(Teacher teach) {
    43         this.teach = teach;
    44     }
    45     @Override
    46     public String toString() {
    47         return "Student [sid=" + sid + ", sname=" + sname + ", teach=" + teach + "]";
    48     }
    49 }
     1 package com.rong.test;
     2 
     3 import java.util.Set;
     4 
     5 import org.hibernate.Session;
     6 import org.hibernate.SessionFactory;
     7 import org.hibernate.Transaction;
     8 import org.hibernate.boot.registry.StandardServiceRegistryBuilder;
     9 import org.hibernate.cfg.Configuration;
    10 import org.hibernate.service.ServiceRegistry;
    11 import org.junit.Test;
    12 
    13 import com.rong.entity.Student;
    14 import com.rong.entity.Teacher;
    15 
    16 public class HibernateTest {
    17     @Test
    18     public void test1(){
    19         Configuration configuration=new Configuration().configure();
    20         ServiceRegistry serviceRegistry=new StandardServiceRegistryBuilder().applySettings(configuration.getProperties()).build();
    21         SessionFactory sessionFactory = configuration.buildSessionFactory(serviceRegistry);
    22         Session session = sessionFactory.openSession();
    23         Transaction transaction = session.beginTransaction();
    24 
    25         Teacher teacher=new Teacher();
    26         teacher.setTname("夏雨");
    27         Student student1=new Student();
    28         student1.setSname("曹操");
    29         student1.setTeach(teacher);
    30         Student student2=new Student();
    31         student2.setSname("刘备");
    32         student2.setTeach(teacher);
    33         session.save(teacher);
    34         session.save(student1);
    35         session.save(student2);
    36         //
    37         Student stu=(Student) session.get(Student.class, 2);
    38         System.out.println(stu.getSname()+":"+stu.getTeach().getTname());
    39         
    40         //
    41         Teacher tea=(Teacher) session.get(Teacher.class, 1);
    42         System.out.println(tea.getTid()+tea.getTname());
    43         transaction.commit();
    44         session.close();
    45         sessionFactory.close();
    46     }
    47 }

    D.多对多

     1 package com.rong.entity;
     2 
     3 import javax.persistence.Entity;
     4 import javax.persistence.GeneratedValue;
     5 import javax.persistence.GenerationType;
     6 import javax.persistence.Id;
     7 import javax.persistence.Table;
     8 
     9 @Entity
    10 @Table(name="t_teacher")
    11 public class Teacher {
    12     @Id
    13     @GeneratedValue(strategy=GenerationType.AUTO)
    14     private int tid;
    15     private String tname;
    16     
    17     public int getTid() {
    18         return tid;
    19     }
    20     public void setTid(int tid) {
    21         this.tid = tid;
    22     }
    23     public String getTname() {
    24         return tname;
    25     }
    26     public void setTname(String tname) {
    27         this.tname = tname;
    28     }
    29     @Override
    30     public String toString() {
    31         return "Teacher [tid=" + tid + ", tname=" + tname + "]";
    32     }
    33 }
     1 package com.rong.entity;
     2 
     3 import java.util.HashSet;
     4 import java.util.Set;
     5 
     6 import javax.persistence.CascadeType;
     7 import javax.persistence.Entity;
     8 import javax.persistence.FetchType;
     9 import javax.persistence.GeneratedValue;
    10 import javax.persistence.GenerationType;
    11 import javax.persistence.Id;
    12 import javax.persistence.JoinColumn;
    13 import javax.persistence.JoinTable;
    14 import javax.persistence.ManyToMany;
    15 import javax.persistence.Table;
    16 
    17 @Entity
    18 @Table(name="t_student")
    19 public class Student {
    20     @Id
    21     @GeneratedValue(strategy=GenerationType.AUTO)
    22     private int sid;
    23     private String sname;
    24     @ManyToMany(targetEntity=Teacher.class
    25             ,fetch=FetchType.LAZY
    26             ,cascade=CascadeType.REMOVE)
    27     // 生成中间表
    28     @JoinTable(name="tea_stu"
    29                 ,joinColumns=@JoinColumn(name="s_id",referencedColumnName="sid")
    30                 ,inverseJoinColumns=@JoinColumn(name="t_id",referencedColumnName="tid")
    31                 )
    32     private Set<Teacher> teacherSet=new HashSet<Teacher>();
    33     public int getSid() {
    34         return sid;
    35     }
    36     public void setSid(int sid) {
    37         this.sid = sid;
    38     }
    39     public String getSname() {
    40         return sname;
    41     }
    42     public void setSname(String sname) {
    43         this.sname = sname;
    44     }
    45     public Set<Teacher> getTeacherSet() {
    46         return teacherSet;
    47     }
    48     public void setTeacherSet(Set<Teacher> teacherSet) {
    49         this.teacherSet = teacherSet;
    50     }
    51     @Override
    52     public String toString() {
    53         return "Student [sid=" + sid + ", sname=" + sname + ", teacherSet=" + teacherSet + "]";
    54     }
    55 }
     1 package com.rong.test;
     2 
     3 import java.util.Set;
     4 
     5 import org.hibernate.Session;
     6 import org.hibernate.SessionFactory;
     7 import org.hibernate.Transaction;
     8 import org.hibernate.boot.registry.StandardServiceRegistryBuilder;
     9 import org.hibernate.cfg.Configuration;
    10 import org.hibernate.service.ServiceRegistry;
    11 import org.junit.Test;
    12 
    13 import com.rong.entity.Student;
    14 import com.rong.entity.Teacher;
    15 
    16 public class HibernateTest {
    17     @Test
    18     public void test1(){
    19         Configuration configuration=new Configuration().configure();
    20         ServiceRegistry serviceRegistry=new StandardServiceRegistryBuilder().applySettings(configuration.getProperties()).build();
    21         SessionFactory sessionFactory = configuration.buildSessionFactory(serviceRegistry);
    22         Session session = sessionFactory.openSession();
    23         Transaction transaction = session.beginTransaction();
    24 
    25         Teacher teacher1=new Teacher();
    26         teacher1.setTname("夏雨");
    27         Teacher teacher2=new Teacher();
    28         teacher2.setTname("陈雅静");
    29         Student student1=new Student();
    30         student1.setSname("曹操");
    31         student1.getTeacherSet().add(teacher1);
    32         student1.getTeacherSet().add(teacher2);
    33         Student student2=new Student();
    34         student2.setSname("刘备");
    35         student2.getTeacherSet().add(teacher1);
    36         student2.getTeacherSet().add(teacher2);
    37         session.save(teacher1);
    38         session.save(teacher2);
    39         session.save(student1);
    40         session.save(student2);
    41         //////////////////////////
    42         Student stu=(Student) session.get(Student.class, 2);
    43         Set<Teacher> teacherSet = stu.getTeacherSet();
    44         for (Teacher teacher : teacherSet) {
    45             System.out.println(teacher.getTid()+":"+teacher.getTname());
    46         }
    47         //////////////////////////
    48         Teacher tea=(Teacher) session.get(Teacher.class, 2);
    49         System.out.println(tea.getTid()+tea.getTname());
    50         transaction.commit();
    51         session.close();
    52         sessionFactory.close();
    53     }
    54 }

  • 相关阅读:
    Mysql支持的数据类型
    JavaScript 原型中的哲学思想
    99%的人都理解错了HTTP中GET与POST的区别
    Let's Encrypt,站点加密之旅
    说说cglib动态代理
    说说Java代理模式
    RESTful API 编写指南
    RESTful 架构风格概述
    Centos 6 搭建安装 Gitlab
    超详细的阿里字节Spring面试技术点总结(建议收藏)
  • 原文地址:https://www.cnblogs.com/57rongjielong/p/8259584.html
Copyright © 2011-2022 走看看