关于使用hibernate注解总结

首先,我们先了解一下什么是hibernate注解:

  Hibernate提供了Hibernate Annotations扩展包,它可以替代复杂的*hbm.xml,从而使得hibernate程序的开发大大简化。

  带注解的持久类也是普通POJO,它们只是具备了持久性注解的普通POJO

  事实上,使用注解时我们可以保持字段的持久性(注解写在成员变量上) 也可以保持属性(注解写在getter方法上)的持久性。

接下来,我们看一下hibernate常用的注解有哪些以及如何使用

@Entity——注释声明该类为持久类。将一个javabean类声明为一个实体的数据库表映射类,最好实现序列化

      此时,默认情况下,所有的类属性都为映射到数据表的持久性字段.若在类中,添加另外属性,而非映射来数据库的, 要用下面的Transient来注解.

@Table(name="student",schema="mytest")——持久性映射的表(name=“student”) @Table是类一级的注解

@Table定义在@Entity下,为实体bean映射表,默认为实体类名,不用带包名

@Id——注释可以表中的主键

@GeneratedValue(strategy=GenerationType.IDENTITY)——定义自动增长的主键的生成策略.

Hibernate 能够出色地自动生成主键。Hibernate/EBJ 3 注释也可以为主键的自动生成提供丰富的支持,允许实现各种策略。

其生成规则由@GeneratedValue设定的.

JPA提供的四种标准用法为TABLE,SEQUENCE,IDENTITY,AUTO.

TABLE:使用一个特定的数据库表格来保存主键。

SEQUENCE:根据底层数据库的序列来生成主键,条件是数据库支持序列。

IDENTITY:主键由数据库自动生成(主要是自动增长型)

AUTO:主键由程序控制。

在指定主键时,如果不指定主键生成策略,默认为AUTO。

@Id

相当于

@Id

@GeneratedValue(strategy = GenerationType.AUTO)

@Transient——将忽略这些字段和属性,不用持久化到数据库中,适用于在持久化类中某些属性不属于映射到的数据表,而是其他的

@Enumerated——声明枚举

@Version——声明对乐观锁的支持

@OneToOne——可以建立实体bean之间的一对一的关联

@OneToMany——可以建立实体bean之间的一对多的关联

@ManyToOne——可以建立实体bean之间的多对一的关联

@ManyToMany——可以建立实体bean之间的多对多的关联

@Formula——一个SQL表达式,这种属性是只读的,不在数据库生成属性(可以使用sum、average、max等)

@OrderBy——Many端某个字段排序(List)

下面贴上自己写的一个测试实体类代码

package com.zwk;

import javax.persistence.*;

@Entity
@Table(name = "student", schema = "mytest")
public class StudentEntity {
    private int sid;
    private String sname;
    private String sex;
    private GradeEntity grade;
    public  StudentEntity(){

    }
    //gid是外键  与grade表的主键关联,表示可以多个学生属于一个班级
    @ManyToOne              //指定多对一关系映射
    @JoinColumn(name="gid")   //指定对应的列
    public GradeEntity getGrade() {
        return grade;
    }

    public void setGrade(GradeEntity grade) {
        this.grade = grade;
    }

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "sid")
    public int getSid() {
        return sid;
    }

    public void setSid(int sid) {
        this.sid = sid;
    }

    @Basic
    @Column(name = "sname")
    public String getSname() {
        return sname;
    }

    public void setSname(String sname) {
        this.sname = sname;
    }

    @Basic
    @Column(name = "sex")
    public String getSex() {
        return sex;
    }

    public void setSex(String sex) {
        this.sex = sex;
    }

    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;

        StudentEntity that = (StudentEntity) o;

        if (sid != that.sid) return false;
        if (sname != null ? !sname.equals(that.sname) : that.sname != null) return false;
        if (sex != null ? !sex.equals(that.sex) : that.sex != null) return false;

        return true;
    }

    @Override
    public int hashCode() {
        int result = sid;
        result = 31 * result + (sname != null ? sname.hashCode() : 0);
        result = 31 * result + (sex != null ? sex.hashCode() : 0);
        return result;
    }
}
package com.zwk;

import org.hibernate.annotations.Cascade;

import javax.persistence.*;
import java.util.HashSet;
import java.util.Set;
@Entity
@Table(name = "grade", schema = "mytest")
public class GradeEntity {
    private int gid;
    private String gname;
    private String gdesc;
    private Set<StudentEntity> students=new HashSet<StudentEntity>();
    public GradeEntity(){

    }
    @OneToMany//指定一对多关系
    @Cascade(value = {org.hibernate.annotations.CascadeType.SAVE_UPDATE})//设置级联关系
    @JoinColumn(name="gid")
    public Set<StudentEntity> getStudents() {
        return students;
    }

    public void setStudents(Set<StudentEntity> students) {
        this.students = students;
    }

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "gid")

    public int getGid() {
        return gid;
    }

    public void setGid(int gid) {
        this.gid = gid;
    }

    @Basic
    @Column(name = "gname")
    public String getGname() {
        return gname;
    }

    public void setGname(String gname) {
        this.gname = gname;
    }

    @Basic
    @Column(name = "gdesc")
    public String getGdesc() {
        return gdesc;
    }

    public void setGdesc(String gdesc) {
        this.gdesc = gdesc;
    }

    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;

        GradeEntity that = (GradeEntity) o;

        if (gid != that.gid) return false;
        if (gname != null ? !gname.equals(that.gname) : that.gname != null) return false;
        if (gdesc != null ? !gdesc.equals(that.gdesc) : that.gdesc != null) return false;

        return true;
    }

    @Override
    public int hashCode() {
        int result = gid;
        result = 31 * result + (gname != null ? gname.hashCode() : 0);
        result = 31 * result + (gdesc != null ? gdesc.hashCode() : 0);
        return result;
    }
}

原文地址:https://www.cnblogs.com/zwk2018/p/9527004.html

时间: 2024-11-08 23:06:25

关于使用hibernate注解总结的相关文章

hibernate注解

慕课网:http://www.imooc.com/learn/524 一.类级别注解 简介 使用注解的目的:为了简化繁琐的ORM映射文件(*.hbm)的配置 JPA(Java Persistence API)与hibernate的关系:JPA是标准接口,hibernate是实现(hibernate的功能是jpa的超集,功能更强大) hibernate如何实现与JPA的关系:通过hibernate-annotation.hibernate-entitymanager.hibernate-core三

Hibernate学习一:Hibernate注解CascadeType

http://zy19982004.iteye.com/blog/1721846 ———————————————————————————————————————————————————————— Hibernate学习一:Hibernate注解CascadeType 博客分类: Hibernate hibernate 一.概念 现有一场景:一个管理员可以管理多个网吧,一个网吧可以被多个管理员管理.从中抽象出一个多对多的例子user-bar. 主控方user:多对多里面里面会有第三张表user_b

(十) 使用Hibernate 注解

Hibernate里有两种注解 : Hibernate 注解 JPA注解 主键生成机制 : http://www.cnblogs.com/ph123/p/5692194.html 案例一:   用注解对非复合主键的表生成配置文件 package bean; import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.GeneratedValue; import javax.p

Hibernate注解总结:

Hibernate注解总结: 首先我们都知道Hibernate框架是持久层的一个框架,用于对数据的访问和操作.个人觉得其强大就在于它可以使用HQL语句来进行快速的增.删.改的操作,也可以使用Sql语句来进行数据操作,很是方便快捷,备受大型项目青睐,之前所做的都是用的MyBatis感觉比MyBatis要方便些.但是有些人会认为说开发人员理应熟练使用sql语句,对MyBatis更欢迎.智者见智仁者见仁.我就从我平时使用的注解说起吧: @id:这个想必大家都不会陌生的,在实体类中定以主键的标识. @E

关于hibernate注解的简单应用

@Override 用途:重写父类的同名方法 单元测试注解 @Test 用途:用于测试 @Before 用途:单测方法走之前执行 @After 用途:单测方法走之后执行 注解的目标:替换小配置.替换hbm文件 @Entity  :标识实体类(被持久化) @Table  :DB层表的名称 @Transient :不持久化某个属性 @Column:数据表中的字段名 @GenerateValue :主键生成策略 -----------------关联--------------------------

Hibernate注解映射联合主键的三种主要方式(转载)

转自:http://blog.csdn.net/robinpipi/article/details/7655388 联合主键用hibernate注解映射方式主要有三种:第一.将联合主键的字段单独放在一个类中,该类需要实现Java.io.Serializable接口并重写equals和hascode,再将该类注解为@Embeddable,最后在主类中(该类不包含联合主键类中的字段)保存该联合主键类的一个引用,并生成set和get方法,并将该引用注解为@Id 第二.将联合主键的字段单独放在一个类中,

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

Hibernate注解 1.什么是注解在类上或者方法上打上其他类型的类型元数据 @标志 使用过的注解: @override  方法重写 @Test Junit 单元测试 @Before 单元测试 @After 单元测试 Hibernate中常用的注解 [email protected] 将一个类声明为持久化类 [email protected] 声明持久化类的标识属性 [email protected] 定义标识属性值的生成策略,默认为native [email protected] 将属性映射

hibernate注解解析

最近学习hibernate注解形式配置POJO类,将注解的解析记下来,以备以后使用. 例1. @Entity@Table(name="user")  public class Flight implements Serializable {    Long id; @Id @GeneratedValue(generator="generator") @GenericGenerator(name="generator", strategy = &q

SHOP++ 中Hibernate 注解 用法

最近接触到一款JAVA开源软件(shop++)这是一款电商软件.然后看了这款软件的源代码,发现真的很强大.框架采用的是spring mvc + hibernate + freemarker ,代码结构层次分明,代码封装和重用性也很高.非常适合二次开发.其次重点说说hibernate 注解吧 数据库表采用的是hibernate注解映射的方式.然后略微研究了下,分享一下自己的见解. @Entity说明此类是一个实体映射 @Tabletable用来定义entity主表的name,cataloh,sch

【Hibernate注解】

Hibernate注解不仅可以替换复杂的映射文件,甚至可以逆向生成数据库表 1.需要导入的jar包类列表 hibernate-annotations.jar hibernate-commons-annotations.jar ejb3-persistence.jar 2.配置实体类的常用注解 @Entity 将一个类声明为实体Bean(即一个持久化POJO类) @Id 声明该实体Bean的标识属性(相当于数据表的主键) @GeneratedValue 定义标识符的生成策略 @Table 为实体B