JPA & Hibernate 注解

2023-10-26

1. @Entity(name=“EntityName”)

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

2. @Table(name="",catalog="",schema="")

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

name: 可选 , 表示表的名称 . 默认地 , 表名和实体名称一致 , 只有在不一致的情况下才需要指定表名

catalog: 可选 , 表示 Catalog 名称 , 默认为 Catalog("").

schema: 可选 , 表示 Schema 名称 , 默认为 Schema("").

3. @id

必须

@id 定义了映射到数据库表的主键的属性 , 一个实体只能有一个属性被映射为主键 . 置于 getXxxx() 前 .

4. @GeneratedValue(strategy=GenerationType,generator="")

可选

strategy: 表示主键生成策略 , 有 AUTO,INDENTITY,SEQUENCE 和 TABLE 4 种 , 分别表示让 ORM 框架自动选择,

根据数据库的 Identity 字段生成 , 根据数据库表的 Sequence 字段生成 , 以有根据一个额外的表生成主键 , 默认为AUTO

generator: 表示主键生成器的名称 , 这个属性通常和 ORM 框架相关 

5. @Basic(fetch=FetchType,optional=true)

可选

@Basic 表示一个简单的属性到数据库表的字段的映射 , 对于没有任何标注的 getXxxx() 方法 , 默认即为 @Basic

fetch: 表示该属性的读取策略 , 有 EAGER 和 LAZY 两种 , 分别表示主支抓取和延迟加载 , 默认为 EAGER.

optional: 表示该属性是否允许为 null, 默认为 true

6. @Column

可选

@Column 描述了数据库表中该字段的详细定义 , 这对于根据 JPA 注解生成数据库表结构的工具非常有作用 .

name: 表示数据库表中该字段的名称 , 默认情形属性名称一致

nullable: 表示该字段是否允许为 null, 默认为 true

unique: 表示该字段是否是唯一标识 , 默认为 false

length: 表示该字段的大小 , 仅对 String 类型的字段有效

insertable: 表示在 ORM 框架执行插入操作时 , 该字段是否应出现 INSETRT 语句中 , 默认为 true

updateable: 表示在 ORM 框架执行更新操作时 , 该字段是否应该出现在 UPDATE 语句中 , 默认为 true. 对于一经创建就不可以更改的字段 , 该属性非常有用 , 如对于 birthday 字段 .

columnDefinition: 表示该字段在数据库中的实际类型 . 通常 ORM 框架可以根据属性类型自动判断数据库中字段的类型 , 但是对于 Date 类型仍无法确定数据库中字段类型究竟是 DATE,TIME 还是 TIMESTAMP. 此外 ,String 的默认映射类型为 VARCHAR, 如果要将 String 类型映射到特定数据库的 BLOB 或 TEXT 字段类型 , 该属性非常有用 .

7. @Transient

可选

@Transient 表示该属性并非一个到数据库表的字段的映射 ,ORM 框架将忽略该属性 .
如果一个属性并非数据库表的字段映射 , 就务必将其标示为 @Transient, 否则 ,ORM 框架默认其注解为 @Basic

8. @OneToOne(fetch=FetchType,cascade=CascadeType)

可选

@OneToOne 描述一个一对一的关联

fetch: 表示抓取策略 , 默认为 FetchType.LAZY

cascade: 表示级联操作策略:
casecade={CasecadeType.REFRESH}的含义是只是查询级联,它还有其他3个类型:
CascadeType.MERGE级联更新
CascadeType.PERSIST级联保存
CascadeType.REMOVE级联删除

optional=false定义关联类不一定要存在

  • 一对一单向外键
    @OneToOne(cascade=CascadeType.ALL(指定级联关系))
    @JoinColumn(name=“pid”, unique=“true”)
    demo:
@OneToOne 用来表示类似于以上员工与地址之间的一对一的关系,在员工表中会有一个指向地址表主键的字段address_id,所以主控方(指能够主动改变关联关系的一方)一定是员工,因为,只要改变员工表的address_id就改变了员工与地址之间的关联关系,所以@JoinColumn要写在员工实体类Employee上,自然而然地,地址就是被控方了。
 
Employee.class
@OneToOne(cascade = CascadeType.ALL, fetch = FetchType.LAZY)
@JoinColumn(name = "address_id")
private Address address;
我们也可以不写@JoinColumn,Hibernate会自动在员工表生成关联字段,
字段默认的命名规则:被控方类名_被控方主键,如:address_id。
  • 一对一双向外键:
主控方的配置同一对一单向外键

被控方.class:
@OneToOne(mappedBy="card")(写在被控方的主控方引用上面,值是被控的属性的变量)

9. @ManyToOne/@OneToMany

多对一单向外键:

多方持有一方的引用
@ManyToOne(cascade={CascadeType.ALL},fetch=FetchType.EAGER)
@JoinColumn(name=“cid(和一对多一样)”,referencedColumnName=“CID”)

@JoinColumn中的name为当前类的属性名,(多对一单向,有多方维护)所以,name为student中的cid,而ReferenceColumnName为引用表的列(多对一单向,所以为一方的引用列)即ClassRoom中的主键列

//员工-部门
@ManyToOne(cascade = CascadeType.ALL, fetch = FetchType.EAGER)
@JoinColumn(name = "department_id")
private Department department;

一对多单向外键:
一方持有多方的集合,一个班级有多个学生(一对多)
在集合上设置
@OneToMany(cascade={CascadeType.ALL},fetch=FetchType.LAZY)
@JoinColumn(name=“cid”)(一方的主键)

一对多的时候,一的内部是个集合,为了减小数据库的压力,少加载数据所以用LAZZY加载,反之,多对一的时候每个多方只多加载一条数据,所以可以用EAGER加载

//员工-部门
@OneToMany(cascade = CascadeType.ALL, fetch = FetchType.EAGER)
@JoinColumn(name = "department_id")
private List<Employee> employees;

10. @ManyToMany

多对多单向外键
学生和教师构成多对多的关联关系

创建中间表

//学生.class

@ManyToMany
@JoinTable(
   name="teachers_students",
   joinColumns={@JoinColumn(name="sid")},
   inverseJoinColumns={JoinColumn(name="tid")}
)
private List<Teacher> teachers;

多对多双向外键

双方持有对方的集合对象,

//教师类
@ManyToMany(mappedBy="teachers")(将主控方交给学生类)

11. @Temporal

@Temporal(TemporalType.DATE) 得到 yyyy-MM-dd
@Temporal(TemporalType.TIME) 得到 HH:mm:ss
@Temporal(TemporalType.TIMESTAMP)得到 yyyy-MM-dd HH:mm:ss:SSS

12. @CreationTimestamp

使用该注解可以让Hibernate在插入时针对注解的属性对应的日期类型创建默认值。

13. @UpdateTimestamp

使用该注解可以让Hibernate在更新时时针对注解的属性对应的日期类型创建默认值。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

JPA & Hibernate 注解 的相关文章

随机推荐

  • 时间函数——setDate()

    实例 设置一个月的某一天 var d new Date d setDate 15 d 输出结果 Sun Sep 15 2019 11 06 10 GMT 0800 中国标准时间 定义和用法 setDate 方法用于设置一个月的某一天 浏览器
  • [1055]VM上配置Centos7网络&设置静态IP&修改hostname

    文章目录 配置ceotos7网络 设置静态IP 修改hostname 配置ceotos7网络 首先在安装好centos7的时候会在本机电脑的网络管理里面出现以下网络 开机登录时候直接ping www baidu com 会发现ping不同
  • 一个很骚的sql报错:分页查询,每次返回数据可能不同

    追加 不是主要问题 应该是排序字段缺少唯一值 后面加了rowid 生效了 主表 bdg budget project 辅表 bdg budget 关系 一对一关系 问题 相同sql 分页查询 多次点击 返回的数据可能不同 原因 排序字段是辅
  • "防止同时出现多个应用程序实例"之改进

    防止同时出现多个应用程序实例 之改进字号 大 中 小 在 Delphi 5 开发人员指南 中第13章中有一篇 防止同时出现多个应用程序实例 代码中给出了一个MultInst pas单元 工程引用此单元就能防止同时出现多个实例 但实际应用中发
  • 铨顺宏RFID:错综复杂的地下管道用RFID标签能完成管理吗?

    RFID技术性使地底管网系统软件可以开展国际化的信息管理方法 提升管路的布署 日常保护和运作管理能力 现阶段地底管网资源优化配置方式已基本上不可以融入日益增加的管网业务流程要求 在较大水平上阻碍了城市的发展趋势 利用RFID方式方法对城市地
  • 探索地块建立

    探索地块建立 public static void main String args int num 0 Scanner sc new Scanner System in String s sc nextLine split int n I
  • Java获取当前时间前几个月、季度

    项目统计需要展示折线图 要求横轴 当前日期的前4个季度 前12个月 至于包含 不包含本月 自己处理一下日期就好 获取数组 import java time LocalDate import java util ArrayList impor
  • JavaScript数组方法整理

    JavaScript数组方法整理 1 join join 就是把数组转换成字符串 然后给他规定个连接字符 默认的是逗号 var arr 1 2 3 console log arr join 1 2 3 console log arr joi
  • 浅谈数据分析和数据挖掘

    1 数据分析 数据分析是指用适当的统计分析方法对收集来的大量数据进行分析 提取有用信息和形成结论而对数据加以详细研究和概括总结的过程 数据分析有极其广泛的应用范围 典型的数据分析过程可看做 四部曲 第一 数据获取 获取数据的前提是对商业问题
  • “老外写中国”的四大流派

    中国大趋势 当中国统治世界 关系 老北京最后的日子 工厂女孩 中国行 在英文的书架中 寻找主题为 中国 的图书 会冒出很多这样的封面设计 大红色的背景 鲜红色五角星占据主要位置 同样鲜红的书名中 CHINA 这个词的字体总是放得最大 这里介
  • AcWing 853. 有边数限制的最短路

    给定一个 n 个点 m 条边的有向图 图中可能存在重边和自环 边权可能为负数 请你求出从 1 号点到 n 号点的最多经过 k 条边的最短距离 如果无法从 1 号点走到 n 号点 输出 impossible 注意 图中可能 存在负权回路 输入
  • 如何安装maatwebsite/excel?

    背景 项目要下载内容 那最好是用扩展了 常用的也就是maatwebsite excel 但是今天安装的提示异常 错误如下 Problem 1 maatwebsite excel 3 1 28 3 1 30 require phpoffice
  • Python爬虫深造篇(一)——多线程网页爬取

    一 前情提要 相信来看这篇深造爬虫文章的同学 大部分已经对爬虫有不错的了解了 也在之前已经写过不少爬虫了 但我猜爬取的数据量都较小 因此没有过多的关注爬虫的爬取效率 这里我想问问当我们要爬取的数据量为几十万甚至上百万时 我们会不会需要要等几
  • 《Centos系统——linux运维必备基础命令》

    目录 1 vi编译器的3种基本模式 命令模式 末行模式 插入模式 2 vim的高级模式 可视化模式 vim多行注释 3 线上查询及帮助命令 2 个 man 帮助 help 命令用于显示shell内部命令的帮助信息 4 文件和目录操作命令 1
  • 删除单向链表中的某一个节点

    已知一个单向链表的表头head 写出一个删除某一个节点的算法 要求先找到此节点 然后删除 include
  • 【LeetCode刷题】26. 删除有序数组中的重复项

    1 题目描述 力扣 给你一个 升序排列 的数组 nums 请你 原地 删除重复出现的元素 使每个元素 只出现一次 返回删除后数组的新长度 元素的 相对顺序 应该保持 一致 由于在某些语言中不能改变数组的长度 所以必须将结果放在数组nums的
  • 全国计算机等级考试题库二级C操作题100套(第78套)

    第78套 给定程序中 函数fun的功能是 将N N矩阵主对角线元素中的值与反向对角线对应位置上元素中的值进行交换 例如 若N 3 有下列矩阵 1 2 3 4 5 6 7 8 9 交换后为 3 2 1 4 5 6 9 8 7 请在程序的下划线
  • Binutils工具集 解析

    对于嵌入式系统开发 掌握相应的工具至关重要 它能使我们解决问题的效率大大提高 目前 可以说嵌入式系统的开发工具是GNU的天下 因为来自GNU的GCC编译器支持大量的目标处理器 除了GCC 还有一个非常重要的 同样来自于GNU的工具集 too
  • 关联类及如何在语言级别实现多元关联

    1 关联类 An association class is used to model an association as a class Association classes often occur in many to one and
  • JPA & Hibernate 注解

    1 Entity name EntityName 必须 name 为可选 对应数据库中一的个表 2 Table name catalog schema 可选 通常和 Entity 配合使用 只能标注在实体的 class 定义处 表示实体对应