zoukankan      html  css  js  c++  java
  • Hibernate的注解似开发

    挂有@的接口和一些描述元注解

    本次开发使用的注解

    @Id

    必须,定义了映射到数据库表的主键的属性,一个实体只能有一个属性被映射为主键

    @Table

    可选,通常和@Entity配合使用,只能标注在实体的class定义处,表示实体对应的数据库表的信息 

    @Entity

    必须,name为可选,对应数据库中一的个表

    @GeneratedValue

    可选,

    strategy:表示主键生成策略,有AUTOINDENTITYSEQUENCETABLE 4种,分别表示让ORM框架自动选择、根据数据库的Identity字段生成、根据数据库表的Sequence字段生成、以及根据一个额外的表生成主键。默认为AUTO  

      

    generator:表示主键生成器的名称,这个属性通常和ORM框架相关。例如,Hibernate可以指定uuid等主键生成方式

    默认不写采用的是本地的主键生成策咯native

    @Column

    可选 ,描述了数据库表中该字段的详细定义

    @Transient

    可选,表示该属性并非一个到数据库表的字段的映射,ORM框架将忽略该属性

    @OneToMany

    可选,

    OneToMany指定了一对多的关系,mappedBy="room"指定了由哪一方一方来维护关联关系mappedBy指的是多的一方对1的这一方的依赖的属性,(注意:如果没有指定由谁来维护关联关系,则系统会给我们创建一张中间表)

    @JoinColumn(name = "deptno")

    通过 JoinColumn name属性指定了外键的名称 deptno (注意:如果我们不通过JoinColum来指定外键的名称,系统会给我们声明一个名称)

    @ManyToOne(cascade = CascadeType.ALL)

    ManyToOne指定了多对一的关系

    CascadeType.PERSIST:级联新增

    CascadeType.MERGE:级联合并

    CascadeType.REFRESH:级联刷新

    CascadeType.REMOVE:级联删除

    CascadeType.ALL:以上四种都是

    Passanger表关系定义如下:

    @ManyToOne(cascade = { CascadeType.PERSIST,CascadeType.MERGE})

    一对一的实例:

    一个人对应着一张身份证

    package cn.baby.entity;
    
    import javax.persistence.*;
    import java.io.Serializable;
    
    /**
     * 人
     * 人与省份证一对一
     * Created by Administrator on 2018/1/3.
     */
    @Entity
    @Table(name = "PERSON")
    public class Person implements Serializable{
        @Id
        @GeneratedValue
        private int id;
        @Column
        private String name;
        //不要初始化,初始化会使对象处于临时状态,会使保存的时候抛异常 
        @OneToOne
        //申明一个外键
        @JoinColumn(name = "pk_id")
        private Card card;
    
        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 Card getCard() {
            return card;
        }
    
        public void setCard(Card card) {
            this.card = card;
        }
    }
    

      

    package cn.baby.entity;
    
    import javax.persistence.*;
    import java.io.Serializable;
    
    /**
     * 省份证
     * 一对一
     * Created by Administrator on 2018/1/3.
     */
    @Table(name = "CARD")
    @Entity
    public class Card implements Serializable{
        @Id
        @GeneratedValue
        private int id;
        //谁维护表的关系card,保存时,只需要保存card就行
        @OneToOne(mappedBy = "card",cascade = CascadeType.ALL)
        private Person person;
    
        public int getId() {
            return id;
        }
    
        public void setId(int id) {
            this.id = id;
        }
    
        public Person getPerson() {
            return person;
        }
    
        public void setPerson(Person person) {
            this.person = person;
        }
    }
    

     测试类

    //一对一
        @Test
        public void onetoone(){
            Person person=new Person();
            Card card=new Card();
            Session session = HibernateUtil.getSession();
            Transaction transaction = session.beginTransaction();
            person.setName("威哥");
            card.setPerson(person);
            person.setCard(card);
            session.save(card);
            transaction.commit();
    
        }
    

      一对多

    一个部门对应着对个员工

    package cn.baby.entity;
    
    import javax.persistence.*;
    import java.io.Serializable;
    import java.util.HashSet;
    import java.util.Set;
    
    /**
     * 部门表
     * 一个部门下有多个员工
     * Created by Administrator on 2017/12/28.
     */
    @Entity
    @Table(name = "DEPT5")
    public class Dept implements Serializable {
        @Id
        @GeneratedValue
        private Integer deptNo;
        @Column
        private String deptName;
        //一个部门下有多个员工 植入set集合 一对多,一定是set集合不是hashset,但是底层实现的是他
        @OneToMany(mappedBy = "dept", cascade = CascadeType.ALL)
        private Set<Emp> emps=new HashSet<Emp>();
    
        public Integer getDeptNo() {
            return deptNo;
        }
    
        public void setDeptNo(Integer deptNo) {
            this.deptNo = deptNo;
        }
    
        public String getDeptName() {
            return deptName;
        }
    
        public void setDeptName(String deptName) {
            this.deptName = deptName;
        }
    
        public Set<Emp> getEmps() {
            return emps;
        }
    
        public void setEmps(Set<Emp> emps) {
            this.emps = emps;
        }
    }
    

      

    package cn.baby.entity;
    
    import javax.persistence.*;
    import java.io.Serializable;
    import java.util.HashSet;
    import java.util.Set;
    
    /**
     * 员工表
     * 一个员工对应着一个部门
     * Created by Administrator on 2017/12/28.
     */
    @Table(name = "EMP5")
    @Entity
    public class Emp implements Serializable {
        @Id
        @GeneratedValue
        private Integer empNo;
        @Column
        private String empName;
        //一个员工对应着一个部门,植入一个部门属性
        @ManyToOne(cascade = CascadeType.ALL)
        @JoinColumn(name = "deptno")
        private Dept dept;
        //mappedBy谁维护关系,mappedBy指定的是属性名称
        @ManyToMany(mappedBy = "emps",cascade = CascadeType.ALL)
        private Set<Project> projects=new HashSet<Project>();
    
        public Set<Project> getProjects() {
            return projects;
        }
    
        public void setProjects(Set<Project> projects) {
            this.projects = projects;
        }
    
        public Integer getEmpNo() {
            return empNo;
        }
    
        public void setEmpNo(Integer empNo) {
            this.empNo = empNo;
        }
    
        public String getEmpName() {
            return empName;
        }
    
        public void setEmpName(String empName) {
            this.empName = empName;
        }
    
        public Dept getDept() {
            return dept;
        }
    
        public void setDept(Dept dept) {
            this.dept = dept;
        }
    }
    

      测试类:

    //一对多
        @Test
        public void onetomany(){
            Dept dept=new Dept();
            dept.setDeptName("技术部");
            Emp emp=new Emp();
            emp.setEmpName("小黄");
            Emp emp1=new Emp();
            emp1.setEmpName("小黑");
            emp.setDept(dept);
            emp1.setDept(dept);
            dept.getEmps().add(emp);
            dept.getEmps().add(emp1);
            Session session = HibernateUtil.getSession();
            Transaction transaction = session.beginTransaction();
            session.save(dept);
            transaction.commit();
    
        }
    

      多对对

    一个员工可以写多个项目

    一个项目可以被多个员工写

    package cn.baby.entity;
    
    import javax.persistence.*;
    import java.io.Serializable;
    import java.util.HashSet;
    import java.util.Set;
    
    /**
     * 员工表
     * 一个员工对应着一个部门
     * Created by Administrator on 2017/12/28.
     */
    @Table(name = "EMP5")
    @Entity
    public class Emp implements Serializable {
        @Id
        @GeneratedValue
        private Integer empNo;
        @Column
        private String empName;
        //一个员工对应着一个部门,植入一个部门属性
        @ManyToOne(cascade = CascadeType.ALL)
        @JoinColumn(name = "deptno")
        private Dept dept;
        //mappedBy谁维护关系,mappedBy指定的是属性名称
        @ManyToMany(mappedBy = "emps",cascade = CascadeType.ALL)
        private Set<Project> projects=new HashSet<Project>();
    
        public Set<Project> getProjects() {
            return projects;
        }
    
        public void setProjects(Set<Project> projects) {
            this.projects = projects;
        }
    
        public Integer getEmpNo() {
            return empNo;
        }
    
        public void setEmpNo(Integer empNo) {
            this.empNo = empNo;
        }
    
        public String getEmpName() {
            return empName;
        }
    
        public void setEmpName(String empName) {
            this.empName = empName;
        }
    
        public Dept getDept() {
            return dept;
        }
    
        public void setDept(Dept dept) {
            this.dept = dept;
        }
    }
    

      

    package cn.baby.entity;
    
    import javax.persistence.*;
    import java.io.Serializable;
    import java.util.HashSet;
    import java.util.Set;
    
    /**
     * 项目表
     * 多对多
     * Created by Administrator on 2017/12/28.
     */
    @Entity
    @Table(name = "PROJECT5")
    public class Project implements Serializable {
        @Id
        @GeneratedValue
        private Integer proNo;
        @Column
        private String proName;
        @ManyToMany(cascade = CascadeType.ALL)
        //中间表    中间表的名称        本实体对应中间表的列                      另一个实体对应中间表的列
        @JoinTable(
                name = "proemp5",
                joinColumns = @JoinColumn(name = "proid"),
        inverseJoinColumns = @JoinColumn(name = "empid"))
        //员工集合
        private Set<Emp> emps=new HashSet<Emp>();
    
        public Integer getProNo() {
            return proNo;
        }
    
        public void setProNo(Integer proNo) {
            this.proNo = proNo;
        }
    
        public String getProName() {
            return proName;
        }
    
        public void setProName(String proName) {
            this.proName = proName;
        }
    
        public Set<Emp> getEmps() {
            return emps;
        }
    
        public void setEmps(Set<Emp> emps) {
            this.emps = emps;
        }
    }
    

     测试类

      //duo对多
        @Test
        public void manytomany(){
    
            Emp emp=new Emp();
            emp.setEmpName("小黄");
            Emp emp1=new Emp();
            emp1.setEmpName("小黑");
            Project project=new Project();
            project.setProName("易买网");
            Project project1=new Project();
            project1.setProName("易买网1");
            emp.getProjects().add(project);
            emp.getProjects().add(project1);
            emp1.getProjects().add(project);
            project.getEmps().add(emp);
            project1.getEmps().add(emp);
            project.getEmps().add(emp1);
            Session session = HibernateUtil.getSession();
            Transaction transaction = session.beginTransaction();
            session.save(emp);
            session.save(emp1);
            transaction.commit();
    
        }
    

      

  • 相关阅读:
    ASP.NET 4.0的ClientIDMode属性
    关于sql链接超时的问题
    Image.Url 无法使用 Server.MapPath(使用后无论如何也不显示)
    C# 中字符串转换成日期
    Linux RAID 磁盘管理
    脚本编写
    挂载一个NFS共享
    配置NFS服务
    配置多用户SMB挂载
    通过 SMB 共享目录
  • 原文地址:https://www.cnblogs.com/liuzhiw/p/8186264.html
Copyright © 2011-2022 走看看