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 }

  • 相关阅读:
    PHP实现无限极分类
    html2canvas生成并下载图片
    一次线上问题引发的过程回顾和思考,以更换两台服务器结束
    Intellij IDEA启动项目报Command line is too long. Shorten command line for XXXApplication or also for
    mq 消费消息 与发送消息传参问题
    idea 创建不了 java 文件
    Java switch 中如何使用枚举?
    Collections排序
    在idea 设置 git 的用户名
    mongodb添加字段和创建自增主键
  • 原文地址:https://www.cnblogs.com/57rongjielong/p/8259584.html
Copyright © 2011-2022 走看看