【学习笔记】Hibernate 注解 (Y2-1-9)

Hibernate注解

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

@标志

使用过的注解:

  @override   方法重写

  @Test     Junit 单元测试

  @Before   单元测试

  @After    单元测试

Hibernate中常用的注解

[email protected] 将一个类声明为持久化类
[email protected] 声明持久化类的标识属性
[email protected] 定义标识属性值的生成策略,默认为native
[email protected] 将属性映射到类
[email protected] 持久化类映射指定表
[email protected] 忽略这些属性

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);
    }
时间: 2024-10-22 05:00:09

【学习笔记】Hibernate 注解 (Y2-1-9)的相关文章

学习笔记_springmvc注解形式的开发参数接收

springmvc基于注解的开发 注解第一个例子 1. 创建web项目 springmvc-2 2. 在springmvc的配置文件中指定注解驱动,配置扫描器 <!-- sprimgmvc 注解驱动 --> <!-- <mvc:annotation-driven /> --> <!-- springmvc的扫描器,一旦有扫描器的定义上面的mvc:annotation.. 就不需要了,扫描器已经有哪里注解驱动的功能 --> <context:compon

[学习笔记]Spring注解实现Bean

12.3  注解实现Bean定义 12.3.1  概述 前边介绍的Bean定义全是基于XML方式定义配置元数据,且在[12.2注解实现Bean依赖注入]一节中介绍了通过注解来减少配置数量,但并没有完全消除在XML配置文件中的Bean定义,因此有没有方式完全消除XML配置Bean定义呢? Spring提供通过扫描类路径中的特殊注解类来自动注册Bean定义.同注解驱动事务一样需要开启自动扫描并注册Bean定义支持,使用方式如下(resources/chapter12/ componentDefini

Java学习笔记-Hibernate关系映射

1. 初识Hibernate——关系映射 http://blog.csdn.net/laner0515/article/details/12905711 2. Hibernate 笔记8 关系映射1(多对一,一对多): http://www.cnblogs.com/zilong882008/archive/2011/11/05/2236559.html 3. Hibernate关联映射 http://www.cnblogs.com/huxi/archive/2009/12/15/1624988.

springMVC学习笔记(二)-----注解和非注解入门小程序

最近一直在做一个电商的项目,周末加班,忙的都没有时间更新博客了.终于在上周五上线了,可以轻松几天了.闲话不扯淡了,继续谈谈springMvc的学习. 现在,用到SpringMvc的大部分使用全注解配置,但全注解配置也是由非注解发张而来的.所以,今天就谈谈springMvc最基础的注解和非注解的配置以及开发模式. 一:基础环境准备 1.功能需求:一个简单的商品列表查询 2.开发环境:eclipse,java1.7,springmvc版本:3.2 3.springMvc所需jar包(一定包括spri

Java学习笔记-Hibernate HQL查询

Session是持久层操作的基础,相当于JDBC中的Connection,通过Session会话来保存.更新.查找数据.session是Hibernate运作的中心,对象的生命周期.事务的管理.数据库的存取都与Session有关Session由SessionFactory创建,是线程安全的Thread-Safe,可以让多个线程同时存取SessionFactory而不会有数据共享的问题 Hibernate中Session的解释 :http://blog.csdn.net/shrek_xu/arti

MyBatis学习笔记(四) 注解

使用MyBatis注解开发,可以省去类配置文件,简洁方便.但是比较复杂的SQL和动态SQL还是建议书写类配置文件. 注解还是不推荐使用的.只是了解了解!简单的CRUD可以使用注解.简单写写. 把之前的例子改成使用注解的. UserMapper.java 1 package com.cy.mybatis.mapper; 2 3 import java.util.List; 4 import java.util.Map; 5 6 import org.apache.ibatis.annotation

spring学习笔记之——注解

spring注解可以很大的减少xml的配置,spring.xml文件的声明为: <?xml version="1.0" encoding="UTF-8" ?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context

Spring学习笔记--使用注解装配

使用@Autowired注解 从Spring2.5开始,最有趣的一种装配Spring Bean的方式是使用注解自动装配Bean的属性.Spring默认禁用注解装配,最简单的启用方式是使用Spring的context命名空间配置中的<context:annotation-config>元素,如下所示: <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.

Spring4学习笔记-通过注解配置bean

通过注解配置Bean TestObject.java package com.spring.beans.annotation; import org.springframework.stereotype.Component;; @Component public class TestObject { } UserController.java package com.spring.beans.annotation.controller; import org.springframework.st

Java学习笔记--Hibernate框架错误集合及解决

错误1:MappingException: Unknown entity解决方案 http://jingyan.baidu.com/article/e75aca8552761b142edac6cf.html 错误2:Could not bind factory to JNDI 2006-07-23 23:14:53,796 [main] WARN org.hibernate.impl.SessionFactoryObjectFactory - Could not bind factory to