Hibernate中注解注解比较多,常用的也就那么几个,在这里把Hibernate中的注解汇总总结一下。

@Entity:将一个类声明为一个实体bean,即一个持久化POJO;

@Id:声明bean的标识属性,即和表中的主键对应的属性;

@Table:声明bean映射数据库中指定的表;

@Column:声明bean的属性到表的列的映射,该注解还有以下属性:

  • name:可选,属性要映射的列明,如果属性名和列名相同则可以省略;
  • unique:可选,是否在该列上设置唯一约束,默认值为false;
  • nullable:可选,该列是否可以为空,默认值为false;
  • insertable:可选,该列是否作为生成的insert语句的列,默认值为true;
  • updatable:可选,该列是否作为生成的update语句的列,默认值为true;
  • columnDefinition:可选,为这个特定类覆盖sql ddl片段,可能导致无法在不同的数据库之间移植,慎用;
  • table:可选,定义对应的表,默认为主表;
  • length:可惜俺,列长度,默认值为255;
  • precision:可选,列值数字的有效位数;
  • scale:可选,列值数字小数点右边的位数,默认值为0;

@GenerateValue:声明主键的生成策略,该注解还有以下属性:

  • strategy:指定生成策略,类型为GenerationType,默认值为GenerationType.AUTO;

    • GenerationType.AUTO:主键由程序控制;
    • GenerationType.TABLE:使用一个特定的数据库表来存储主键;
    • GenerationType.IDENTITY:主键由数据库自动生成,主要是自动增长类型;
    • GenerationType.SEQUENCE:根据底层数据库的序列来生成主键,条件是数据库要支持序列,要与generator一起使用;
  • generator:指定生成主键的生成器;

@SequenceGenerator:声明一个数据库序列,该注解还有以下属性:

  • name:主键生成策略的名称,它被引用在@GeneratorValue中设置的“generator”中;
  • sequenceName:生成策略用到的数据库序列名称;
  • initialValue:主键初始值,默认值为0;
  • allocationSize:每次主键增加的大小;

@GenericGenerator:声明一个hibernate的主键生成策略,有十三种生成策略。该注解还有以下属性:

  • name:指定生成器名称;
  • strategy:指定具体生成器的类名,指定生成策略;
  • parameters:得到strategy指定的具体生成器所用到的参数;
  • 十三种生成策略(strategy属性的值)如下:
    • native:oracle采用Sequence方式,MySql和Sql Server采用identify方式。native就是将主键的生成工作交给数据库来完成,hiberante不管,很常用。
    • uuid:采用128为的uuid算法生成主键,uudi被编码为一个32位16进制数字的字符串。占用空间较大。
    • hilo:要在数据库中建立一张额外的表,默认表明是hibernate_unique_key,默认字段是integer类型,名称是next_hi,比较少用。
    • assigned:在插入数据时主键有程序处理,这是generator没有指定时默认的生成策略。等同于JPA中的AUTO,很常用。
    • identity:使用Sql Server和MySql时的自增字段,oracle中不能使用。Sql Server和MySql中很常用。
    • select:使用触发器生成主键,主要用于早期的数据库主键生成机制,少用。
    • sequence:调用谨慎数据库的序列来生成主键,要设定序列名,不然hibernate无法找到。
    • seqhilo:用过hilo算法实现,但是主键历史保存在sequence中,适用于支持sequence的数据库,少用。
    • increment:插入数据时hibernate会给主键添加一个自增的主键,但是一个hibernate实例就维护一个计数器,所以在多个hibernate实例运行是不能使用这个方法。
    • foreign:使用另一个相关对象的主键。通常和one-to-one联合起来使用。
    • guid:使用数据库底层的guid算法机制,对应MySql的uuid()函数,SqlServer的newid()函数,oracle的rawtohex(sys_guid())函数等。
    • uudi_hex:参照uuid,建议用uuid替换。
    • sequence-identify:sequence策略的扩展,采用立即检索策略来获取sequence值,需要jdcb3.0和jdk4以上版本。

@OneToOne:设置一对一关联。

示例:

 1 @Entity
 2 public class Hansband {
 3     private int id;
 4     private String username;
 5     private Wife wife;
 6
 7     @Id
 8     @GeneratedValue(strategy = GenerationType.IDENTITY)
 9     public int getId() {
10         return id;
11     }
12
13     @Column
14     public String getUsername() {
15         return username;
16     }
17     /**
18       * @OneToOne:一对一关联
19       * cascade:级联,它可以有有五个值可选,分别是:
20       * CascadeType.PERSIST:级联新建
21       * CascadeType.REMOVE : 级联删除
22       * CascadeType.REFRESH:级联刷新
23       * CascadeType.MERGE  : 级联更新
24       * CascadeType.ALL    : 以上全部四项
25       * @JoinColumn:主表外键字段
26       * wifeId:Hansband所映射的表中的一个字段
27       */
28     @OneToOne
29     @JoinColumn(name="wifeId")
30     public Wife getWife() {
31         return wife;
32     }
33     public void setId(int id) {
34         this.id = id;
35     }
36     public void setUsername(String username) {
37         this.username = username;
38     }
39     public void setWife(Wife wife) {
40         this.wife = wife;
41     }
42 }
43
44
45 @Entity
46 public class Wife {
47     private int id ;
48     private String username;
49     private Hansband hansband;
50
51     @Id
52     @GeneratedValue(strategy = GenerationType.AUTO)
53     public int getId() {
54         return id;
55     }
56     public String getUsername() {
57         return username;
58     }
59     public void setId(int id) {
60         this.id = id;
61     }
62     public void setUsername(String username) {
63         this.username = username;
64     }
65    /**
66      * @OneToOne:一对一关联
67      * mappedBy = "wife":意思是说这里的一对一配置参考了wife
68      * wife又是什么呢?wife是Husband类中的getWife(),注意不是Husband类中的
69      * wife属性,Husband类中的OneToOne配置就是在getWife()方法上面配的.
70      * 如果Husband类中的getWife()方法改成getNewHusband(),其他不变的话,
71      * 这里就要写成:mappedBy = "new Husband"
72      */
73     @OneToOne(mappedBy="wife")
74     public Hansband getHansband() {
75         return hansband;
76     }
77     public void setHansband(Hansband hansband) {
78         this.hansband = hansband;
79     }
80 }

View Code

@OneToMany和@ManyToOne:设置一对多和多对一关联。

示例:

@Entity
@Table(name = "t_employee")
public class Employee {private Integer employeeId;private String  employeeName;private Company company;@Id@GeneratedValue(strategy = GenerationType.AUTO)public Integer getEmployeeId() {return employeeId;}/*** @ManyToOne:多对一关联* cascade:级联,它可以有有五个值可选,分别是:* CascadeType.PERSIST:级联新建* CascadeType.REMOVE : 级联删除* CascadeType.REFRESH:级联刷新* CascadeType.MERGE  : 级联更新* CascadeType.ALL    : 以上全部四项* fetch = FetchType.LAZY,延迟加载策略,如果不想延迟加载可以用FetchType.EAGER* @JoinColumn:主表外键字段* cid:Employee所映射的表中的一个字段*/@ManyToOne(cascade = {CascadeType.PERSIST, CascadeType.MERGE, CascadeType.REFRESH},fetch = FetchType.LAZY)@JoinColumn(name = "cid")public Company getCompany() {return company;}public String getEmployeeName() {return employeeName;}public void setEmployeeId(Integer employeeId) {this.employeeId = employeeId;}public void setEmployeeName(String employeeName) {this.employeeName = employeeName;}public void setCompany(Company company) {this.company = company;}
}@Entity
@Table(name = "t_company")
public class Company {private Integer companyId;private String  companyName;private Set<Employee> employees;@Id@GeneratedValue(strategy = GenerationType.AUTO)public Integer getCompanyId() {return companyId;}/*** @OneToMany:一对多关联* mappedBy = "company":意思是说这里的一对一配置参考了company* company又是什么呢?company是Employ类中的getCompany(),注意不是Employ类中的* company属性,Employ类中的OneToMany配置就是在getCompany()方法上面配的.* 如果Employ类中的getCompany()方法改成getNewCompany(),其他不变的话,* 这里就要写成:mappedBy = "newCompany"*/@OneToMany(mappedBy = "company")public Set<Employee> getEmployees() {return employees;}public String getCompanyName() {return companyName;}public void setCompanyId(Integer companyId) {this.companyId = companyId;}public void setCompanyName(String companyName) {this.companyName = companyName;}public void setEmployees(Set<Employee> employees) {this.employees = employees;}
}

View Code

@ManyToMany:设置多对多关联。

@Entity
@Table(name="rong_user")
public class User{//省略其它内容private Set<Role> roles = new LinkedHashSet<Role>();//角色集合
    @ManyToMany(cascade = {CascadeType.PERSIST, CascadeType.MERGE})//name是数据库中间表名@JoinTable(name = "rong_user_role", joinColumns = { @JoinColumn(name ="user_id" )}, inverseJoinColumns = { @JoinColumn(name = "role_id") })@OrderBy("id")public Set<Role> getRoles() {return roles;}public void setRoles(Set<Role> roles) {this.roles = roles;}
}@Entity
@Table(name="rong_role")
public class Role{//省略其它内容private Set<User> user = new LinkedHashSet<User>();//用户集合
@ManyToMany(cascade = {CascadeType.PERSIST, CascadeType.MERGE}, mappedBy = "roles", fetch = FetchType.LAZY)public Set<User> getUser() {return user;}public void setUser(Set<User> user) {this.user = user;}
}

View Code

转载于:https://www.cnblogs.com/blackckat-hm/p/3700376.html

Hibernate中的注解说明相关推荐

  1. JPA+Hibernate中常用的注解

    JPA+Hibernate中常用的注解 JPA是Java Persistence API的简称,中文名Java持久层API,是JDK 5.0注解或XML描述对象-关系表的映射关系,并将运行期的实体[对 ...

  2. IDEA中根据数据库自动生成实体类,并自定义所生成的实体类中的注解 @Table @Id @...

    使用IDEA项目添加Hibernate扩展,生成实体类并配置实体类中的注解 一.使用Hibernate自动生成实体类 1.在项目上右键,选择Add Framework Support找到 Hibern ...

  3. hibernate(七) hibernate中查询方式详解

    序言 之前对hibernate中的查询总是搞混淆,不明白里面具体有哪些东西.就是因为缺少总结.在看这篇文章之前,你应该知道的是数据库的一些查询操作,多表查询等,如果不明白,可以先去看一下 MySQL数 ...

  4. 在Spring、Hibernate中使用Ehcache缓存

    前一篇http://blog.csdn.net/ibm_hoojo/article/details/7739181介绍了Ehcache整合Spring缓存,使用页面.对象缓存:这里将介绍在Hibern ...

  5. Hibernate-ORM:14.Hibernate中的命名查询

    ------------吾亦无他,唯手熟尔,谦卑若愚,好学若饥------------- 本篇博客讲述命名查询,所谓命名查询是什么呢? Hibernate中允许我们在xml,实体类,甚至注解的方式来编 ...

  6. 声明属性Hibernate的Annotation注解

    工作之余抽点时间出来写写博文,希望对新接触的朋友有帮助.今天在这里和大家一起学习一下声明属性 当项目变得比较大的时候,如何还应用hbm.xml文件来配置Hibernate实体就会变得比较复杂.这里Hi ...

  7. hibernate中@Entity和@Table的区别

    Java Persistence API定义了一种定义,可以将常规的普通Java对象(有时被称作POJO)映射到数据库. 这些普通Java对象被称作Entity Bean. 除了是用Java Pers ...

  8. spring中使用注解代替xml配置

    今天两部分内容,第一部分是注解,使用注解配置Spring,然后第二个是Spring中的AOP,今天就需要这两部分,也没有练习,第一个注解配置Spring,这三大框架都是用注解来配置,这三大框架,都是支 ...

  9. java中注解的解析_全面解析Java中的注解与注释

    注解一.什么是 Annotation? (注解 or 注释)Annotation, 准确的翻译应该是 -- 注解. 和注释的作用完全不一样. Annotation 是JDK5.0及以后版本引入的一个特 ...

最新文章

  1. tcp reno 介绍
  2. gulp 与 Webpack 的 异曲同工之处
  3. 算法回顾(三) 二分查找
  4. C语言rewind()函数(设置文件位置为给定流 stream 的文件的开头)(回到文件开头重读)
  5. 凹凸世界服务器维护到几点,《凹凸世界》2021年7月21日更新版本停服维护公告...
  6. Jquery获取服务器端控件ID的方法
  7. 数据库的关系运算和完整性约束
  8. python读取yaml文件
  9. linux 下各个工具使用(screen、tmux,pyenv、virtualenv,pip国内源,tree)
  10. 关于DevExpress的心得
  11. Mac下使用Wine安装PowerDesigner15
  12. ubuntu ssh密钥_生成SSH密钥以在Ubuntu中进行无密码登录
  13. mvc razor html.list,NetCore Web应用开发-HTML,C#,Razor补充
  14. SQL注入攻击原理与几种防御方式
  15. 新手淘宝开店店铺运营的六大核心技能
  16. ovftool导出虚拟机报错处理过程!
  17. 双系统安装deepin20_记录一次Windows+Deepin双系统安装及简单优化
  18. PINN解偏微分方程实例3(Allen-Cahn方程)
  19. 解决金山词霸和有道词典不能对pdf文档屏幕取词的方法
  20. shell 十三问:

热门文章

  1. 嵌入式人工智能,理念还是噱头?
  2. 秦朝是一个法治国家吗?
  3. linux文件夹介绍
  4. PyCharm母公司JetBrains出品,一款类似ggplot2的python可视化工具!!
  5. 【项目优化01】使用Git管理项目及使用redis缓存短信验证码,菜品以及套餐数据
  6. 头脑风暴问题:如何将一只全新品种的龙虾卖给养虾人?
  7. 小程序怎么变成链接?
  8. 2022 CCF中国软件大会(CCF Chinasoft)“可信AI软件系统工程技术”论坛成功召开...
  9. vs2017编写的html需要打包,VS2017 安装打包插件的图文教程
  10. java集合Collection