zoukankan      html  css  js  c++  java
  • 【学习笔记】Hibernate 注解 (Y2-1-9)

    Hibernate注解

    1.什么是注解
    在类上或者方法上打上其他类型的类型元数据

    @标志

    使用过的注解:

      @override   方法重写

      @Test     Junit 单元测试

      @Before   单元测试

      @After    单元测试

    Hibernate中常用的注解

    1.@Entity 将一个类声明为持久化类
    2.@ID 声明持久化类的标识属性
    3.@GeneratedValue 定义标识属性值的生成策略,默认为native
    4.@Column 将属性映射到类
    5.@Table 持久化类映射指定表
    6.@Transient 忽略这些属性

    Hibernate中可以使用小配置文件来关联映射,也可以使用注解.

    1.一对一关联

    一个人Human 有一个身份证号Identity 一个身份证号只属于一个人

    实体类如下

    @Entity
    @Table
    public class Human {
        private Integer hid;
        @Column
        private String hname;
        private Identity identity;
    
        @OneToOne
        @JoinColumn(name = "iid")
        public Identity getIdentity() {
            return identity;
        }
    
        public void setIdentity(Identity identity) {
            this.identity = identity;
        }
    
        @Id
        @GeneratedValue
        public Integer getHid() {
            return hid;
        }
    
        public void setHid(Integer hid) {
            this.hid = hid;
        }
    
        public String getHname() {
            return hname;
        }
    
        public void setHname(String hname) {
            this.hname = hname;
        }
    }
    @Entity
    @Table
    public class Identity {
        private Integer iid;
        private String inum;
        private Human human;
    
        @OneToOne(mappedBy = "identity", cascade = CascadeType.ALL)
        public Human getHuman() {
            return human;
        }
    
        public void setHuman(Human human) {
            this.human = human;
        }
    
        @Id
        @GeneratedValue
        public Integer getIid() {
            return iid;
        }
    
        public void setIid(Integer iid) {
            this.iid = iid;
        }
    
        public String getInum() {
            return inum;
        }
    
        public void setInum(String inum) {
            this.inum = inum;
        }
    }

    测试如下

    @Test
        public void insert() {
            Identity id = new Identity();
            id.setInum("1231231212123");
    
            Human human = new Human();
            human.setHname("鬼");
            human.setIdentity(id);
    
            id.setHuman(human);
            session.save(human);
            session.save(id);
        }

    2.双向一对多关联

    一个部门Dept 有多个员工Emp 一个员工只能属于一个部门

    实体类如下

    @Entity
    @Table(name = "dept3")
    public class Dept {
        @Id
        @GeneratedValue
        private Integer deptid;
        private String dname;
        @OneToMany(mappedBy = "dept", cascade = {CascadeType.ALL})
        private Set<Emp> emps = new HashSet<Emp>();
    
        public Integer getDeptid() {
            return deptid;
        }
    
        public void setDeptid(Integer deptid) {
            this.deptid = deptid;
        }
    
        public String getDname() {
            return dname;
        }
    
        public void setDname(String dname) {
            this.dname = dname;
        }
    
        public Set<Emp> getEmps() {
            return emps;
        }
    
        public void setEmps(Set<Emp> emps) {
            this.emps = emps;
        }
    }
    @Entity
    @Table(name = "Emp3")
    public class Emp {
        @Id
        @GeneratedValue
        private Integer eid;
        private String ename;
        @ManyToOne
        @JoinColumn(name = "deptid")
        private Dept dept;
    
        public Integer getEid() {
            return eid;
        }
    
        public void setEid(Integer eid) {
            this.eid = eid;
        }
    
        public String getEname() {
            return ename;
        }
    
        public void setEname(String ename) {
            this.ename = ename;
        }
    
        public Dept getDept() {
            return dept;
        }
    
        public void setDept(Dept dept) {
            this.dept = dept;
        }
    }

    测试如下

    @Test
        public void insert() {
            Dept dept = new Dept();
            dept.setDname("鬼畜部");
    
            Emp emp1 = new Emp();
            emp1.setEname("天命");
            emp1.setDept(dept);
    
            Emp emp2 = new Emp();
            emp2.setEname("斯沃");
            emp2.setDept(dept);
    
            Set<Emp> set = new HashSet<Emp>();
            set.add(emp1);
            set.add(emp2);
            dept.setEmps(set);
    
            session.save(dept);
        }

    3.多对多关联

    一个玩家Player 可以玩多个游戏Game 一个游戏可以被多个玩家玩

    实体类如下

    @Entity
    @Table
    public class Game {
        @Id
        @GeneratedValue
        private Integer gid;
        private String gname;
        @ManyToMany(cascade = CascadeType.ALL)
        @JoinTable(name = "",
                joinColumns = {@JoinColumn(name = "gid")},
                inverseJoinColumns = {@JoinColumn(name = "pid")})
        private Set<Player> players = new HashSet<Player>();
    
        public Integer getGid() {
            return gid;
        }
    
        public void setGid(Integer gid) {
            this.gid = gid;
        }
    
        public String getGname() {
            return gname;
        }
    
        public void setGname(String gname) {
            this.gname = gname;
        }
    
        public Set<Player> getPlayers() {
            return players;
        }
    
        public void setPlayers(Set<Player> players) {
            this.players = players;
        }
    }
    @Entity
    @Table
    public class Player {
        @Id
        @GeneratedValue
        private Integer pid;
        private String pname;
        @ManyToMany(cascade = CascadeType.ALL, mappedBy = "players")
        private Set<Game> games = new HashSet<Game>();
    
        public Integer getPid() {
            return pid;
        }
    
        public void setPid(Integer pid) {
            this.pid = pid;
        }
    
        public String getPname() {
            return pname;
        }
    
        public void setPname(String pname) {
            this.pname = pname;
        }
    
        public Set<Game> getGames() {
            return games;
        }
    
        public void setGames(Set<Game> games) {
            this.games = games;
        }
    }

    测试如下

    @Test
        public void insert(){
            Game g1=new Game();
            g1.setGname("我的课堂");
            Game g2=new Game();
            g2.setGname("感恩的心");
    
            Player p1=new Player();
            p1.setPname("Chara");
            Player p2=new Player();
            p2.setPname("Frisk");
    
            g1.getPlayers().add(p1);
            g1.getPlayers().add(p2);
            g2.getPlayers().add(p1);
            g2.getPlayers().add(p2);
    
            session.save(g1);
            session.save(g2);
        }
  • 相关阅读:
    [COCI2013]DLAKAVAC
    [TJOI2013]最长上升子序列
    AGC040E Prefix Suffix Addition
    AGC010E Rearranging
    AGC021F Trinity
    AGC002F Leftmost Ball
    JOISC2019D ふたつのアンテナ
    LOJ6210 「美团 CodeM 决赛」tree
    Luogu P3781 [SDOI2017]切树游戏
    Problem. M
  • 原文地址:https://www.cnblogs.com/swordtm/p/6405097.html
Copyright © 2011-2022 走看看