hibernate注解整理

Jpa+Hibernate主键生成策略 一、hibernate的uuid主键生成器(String) @Id @GenericGenerator(name="systemUUID",strategy="uuid")//这个是hibernate的注解 @GeneratedValue(generator="systemUUID") //使用uuid的生成策略 @Column(name ="ID",length=255) private String id; strategy–策略,hibernate有13种。Generator——生成器 阅读详情
  • @Entity ——将一个类声明为一个实体bean(即一个持久化POJO类)
  • @Id ——注解声明了该实体bean的标识属性(对应表中的主键)。
  • @Table ——注解声明了该实体bean映射指定的表(table),目录(catalog)和schema的名字。
  • @Column ——注解声明了属性到列的映射。该注解有如下的属性:

    name 可选,列名(默认值是属性名)

    unique 可选,是否在该列上设置唯一约束(默认值false)

    nullable 可选,是否设置该列的值可以为空(默认值false)

    insertable 可选,该列是否作为生成的insert语句中的一个列(默认值true)

    updatable 可选,该列是否作为生成的update语句中的一个列(默认值true)

    columnDefinition 可选,为这个特定列覆盖sql ddl片段(这可能导致无法在不同数据库间移植)

    table 可选,定义对应的表(默认为主表)

    length 可选,列长度(默认值255)

    precision 可选,列十进制精度(decimal precision)(默认值 0

    scale 可选,如果列十进制数值范围(decimal scale)可用,在此设置(默认值0)。

  • @GeneratedValue ——注解声明了主键的生成策略。该注解有如下属性
    strategy 指定生成的策略(JPA定义的),这是一个GenerationType。默认是GenerationType. AUTO
    GenerationType.AUTO 主键由程序控制
    GenerationType.TABLE 使用一个特定的数据库表格来保存主键
    GenerationType.IDENTITY 主键由数据库自动生成(主要是自动增长类型)
    GenerationType.SEQUENCE 根据底层数据库的序列来生成主键,条件是数据库支持序列。这个值要与generator一起使用,generator 指定生成主键使用的生成器(可能是orcale中的序列)。
    generator 指定生成主键使用的生成器
    例如:

@Id @GeneratedValue(generator = “system-uuid”)
@GenericGenerator(name = “system-uuid”, strategy = “uuid”)
@Column(name = “ID”, unique = true, nullable = false)
public StringgetId() {
return this.id;
}

其中generator = “system-uuid”,生成器的名字要与GenericGenerator里name名字一致。

GenericGenerator
声明了一个hibernate的主键生成策略。支持十三种策略。该注解有如下属性:
name 指定生成器名称。
strategy 指定具体生成器的类名(指定生成策略)。
parameters 得到strategy指定的具体生成器所用到的参数。
其十三种策略(strategy属性的值)如下:
● native
对于orcale采用Sequence方式,对于MySQL和SQL Server采用identity(处境主键生成机制),native就是将主键的生成工作将由数据库完成,hibernate不管(很常用)
例:@GeneratedValue(generator = “paymentableGenerator”)
@GenericGenerator(name = “paymentableGenerator”, strategy = “native”)
● uuid
采用128位的uuid算法生成主键,uuid被编码为一个32位16进制数字的字符串。占用空间大(字符串类型)。
例:@GeneratedValue(generator = “paymentableGenerator”)
@GenericGenerator(name = “paymentableGenerator”, strategy = “uuid”)
● hilo
要在数据库中建立一张额外的表,默认表名为hibernate_unque_key,默认字段为integer类型,名称是next_hi(比较少用)。
例:@GeneratedValue(generator = “paymentableGenerator”)
@GenericGenerator(name = “paymentableGenerator”, strategy = “hilo”)
● assigned
在插入数据的时候主键由程序处理(很常用),这是元素没有指定时的默认生成策略。等同于JPA中的AUTO。可用于设定id为字符串类型,可用于手工赋值。
例如:@id
@GeneratedValue(generator = “sid”)
@GenericGenerator(name = “sid”, strategy = “assigned”)
@Column(length=8)
private String id;
例:@GeneratedValue(generator = “paymentableGenerator”)
@GenericGenerator(name = “paymentableGenerator”, strategy = “assigned”)
● identity
使用SQL Server和MySQL的自增字段,这个方法不能放到Oracle中,Oracle不支持自增字段,要设定sequence(MySQL和SQL Server中很常用)。等同于JPA中的IDENTITY
例:@GeneratedValue(generator = “paymentableGenerator”)
@GenericGenerator(name = “paymentableGenerator”, strategy = “identity”)
● select
使用触发器生成主键(主要用于早期的数据库主键生成机制,少用)
例:@GeneratedValue(generator = “paymentableGenerator”)
@GenericGenerator(name = “paymentableGenerator”, strategy = “select”)
● sequence
调用谨慎数据库的序列来生成主键,要设定序列名,不然hibernate无法找到。
例:@GeneratedValue(generator = “paymentableGenerator”)
@GenericGenerator(name = “paymentableGenerator”, strategy = “sequence”, parameters = { @Parameter(name = “sequence”, value = “seq_payablemoney”) })
● seqhilo
通过hilo算法实现,但是主键历史保存在Sequence中,适用于支持Sequence的数据库,如Orcale(比较少用)。
例:@GeneratedValue(generator = “paymentableGenerator”)
@GenericGenerator(name = “paymentableGenerator”, strategy = “seqhilo”, parameters = { @Parameter(name = “max_lo”, value = “5”) })
● increnment
插入数据的时候hibernate会给主键添加一个自增的主键,但是一个hibernate实例就维护一个计数器,所以在多个实例运行的时候不能使用这个方法。
例:@GeneratedValue(generator = “paymentableGenerator”)
@GenericGenerator(name = “paymentableGenerator”, strategy = “increnment”)
● foreign
使用另一个相关的对象的主键。通常和@OneToOne联合起来使用。
例:@Id
@GeneratedValue(generator = “idGenerator”)
@GenericGenerator(name = “idGenerator”, strategy = “foreign”, parameters = { @Parameter(name = “property”, value = “info”) })
Integer id;

   @OneToOne
   EmployeeInfo info;

● guid
采用数据库底层的guid算法机制,对应MySQL的uuid()函数,SQL Server的newid()函数,ORCALE的rawtohex(sys_guid())函数等。
例:@GeneratedValue(generator = “paymentableGenerator”)
@GenericGenerator(name = “paymentableGenerator”, strategy = “guid”)
● uuid.hex
参见uuid,建议用uuid替换。
● sequence-identity
sequence策略的扩展,采用立即检索策略来获取sequence值,需要JDBC3.0和JDK4以上(含1.4)版本。
例:@GeneratedValue(generator = “paymentableGenerator”)
@GenericGenerator(name = “paymentableGenerator”, strategy = “sequence-identity”, parameters = { @Parameter(name = “sequence”, value = “seq_payablemoney”) })

  • @Transient
    声明了非持久化属性,即数据库中没有相应的映射字段,是一个普通属性。

  • @Temporal 声明了日期类型。 TemporalType.DATE 日期,例:2011-04-12
    TemporalType.TIME 时间,例:22:50:30 TemporalType.TIMESTAMP
    日期和时间,例:2011-04-12 22:51:30

    1. @Version 声明了对乐观锁定的支持 例:@Version
      @Column(name=”OPTLOCK”)
      public Integer getVersion() { … } 上面这个例子中,version属性将映射到 OPTLOCK列,entity manager使用该字段来检测更新冲突(防止更新丢失,请参考last-commit-wins策略)。
      根据EJB3规范,version列可以是numeric类型(推荐方式)也可以是timestamp类型。Hibernate支持任何自定义类型,只要该类型实现了UserVersionType。
Spring JPA 注解@Id @GeneratedValue @GenericGenerator 在Spring JPA中,通常使用@Id和@GeneratedValue注解来指定实体的主键及其生成策略。然而,@GeneratedValue注解默认支持的生成策略(如IDENTITY, SEQUENCE, AUTO, TABLE等)可能不完全满足所有数据库或特定场景下的需求。在某些情况下,可能需要更复杂的生成策略,这时可以使用Hibernate特有的@GenericGenerator注解来定义。@GenericGenerator是Hibernate提供的一个高级特性,允许自定义主键的生成策略。 阅读详情

相关推荐

深入解析UVM寄存器模型:reg2bus与bus2reg的隐式调用机制

本文深入解析了UVM寄存器模型中reg2bus与bus2reg函数的隐式调用机制。通过追踪一次寄存器访问的完整旅程,揭示了这两个关键函数是如何在uvm_reg_map和uvm_reg_predictor中被框架自动调用的,从而在抽象的寄存器操作与具体总线事务之间完成转换,并实现镜像值的自动更新。掌握此机制是高效调试和灵活应用UVM寄存器模型的基础。

weixin_29211309的博客 441

解密Hibernate @GenericGenerator注解中的strategy属性

先上图 我们看到 Generator strategy either a predefined Hibernate strategy or a fully qualified class name. 那么a predefined Hibernate strategy 到底在哪预定义的呢? Hibernate又预定义了哪些strategy ?我不知道你在阅读到这里之前有没有想过

jxchallenger的专栏 6693

若依(RuoYi)框架从零到部署:Spring Boot+Vue权限系统完整配置指南

在Java企业级应用开发中,Spring Boot作为构建微服务和单体应用的基石,极大地简化了项目初始化和配置流程。其核心原理在于通过自动配置和起步依赖,快速整合数据访问、安全认证、缓存等常用模块,显著提升开发效率。这一技术价值在需要快速构建后台管理系统的场景中尤为突出,例如权限管理、用户角色分配等通用需求。若依(RuoYi)框架正是基于Spring Boot和Vue.js的优秀实践,它封装了RBAC权限模型、代码生成器等高频功能,提供了开箱即用的解决方案。本文聚焦于若依框架的【环境配置】与【项目部署】,通

weixin_33984032的博客 455

@GeneratedValue 与 @GenericGenerator

一、JPA通用策略生成器  通过annotation来映射hibernate实体的,基于annotation的hibernate主键标识为@Id,  其生成规则由@GeneratedValue设定的.这里的@id和@GeneratedValue都是JPA的标准用法,  JPA提供四种标准用法,由@GeneratedValue的源代码可以明显看出.  Java代码   @T

Yang_Hehui的专栏 1662

MTK眼中6G物理层与无线协议的进化之路

提议统一波束和小区级的测量、报告和切换框架/流程,进一步减少移动性切换过程中的中断,采用可扩展框架/流程,允许在不同移动性场景中进行部分用户设备配置更新以实现快速切换,支持用户设备发起的移动性(同步/切换)以降低延迟和因信令交换导致的失败,设计移动性RS以实现空闲状态下的节能和连接状态下的无缝用户体验,实现5G/6G间的无缝互操作移动性,为固定无线接入(FWA)提供潜在增强,构建统一的跨层移动性框架以降低复杂度、减少中断和失败。为适应多样化的流量类型,需要灵活的帧结构和高层时间对齐。

asd199086的博客 1745

AI赚钱新思路 利用RPA+KIMI实现小红书全自动制作发布(详细攻略)

我已经事先准备好了文案素材,现在就利用Kimi的智能,根据我们已有的文案来创作出新的文案吧。之前我写过一篇关于【:一个戴着用百元大钞制成的简约头饰的少女,她坐在小车里,手里拿着一叠港元,整个画面洋溢着现实主义动漫风格和治愈系的温暖气息。通过这篇文章,我们已经一步步地完成了小红书治愈系文案的创作、治愈系图片的生成,以及笔记的发布,实现了整个流程的自动化。不慌不忙,快乐常在 在繁忙的日常中,给自己的心灵留一片净土,感受内心深处的平静与安宁。接下来,我将展示如何使用影刀来编写自动化脚本,以生成治愈系的图文图片。

weixin_42172073的博客 3690

JPA 常用基础注解说明

对JPA常用基础注解进行解释说明

pi_tiger的博客 1538

【WRF-Chem】预处理工具(Preprocessors)总结

预处理工具(Preprocessors)总结

WW、forever的博客 1179

hibernate注解【整理】

1.类级别注解 @Entity   映射实体类 @Table    映射数据库表 @Entity(name="tableName") - 必须,注解将一个类声明为一个实体bean。 属性:  name - 可选,对应数据库中的一个表。若表名与实体类名相同,则可以省略。 @Table(name="",catalog="",schema="")  - 可选,通常和@Entity 配合使用,

码农的田园 375

2026年大数据开发工程师常见面试选择题

大数据面试高频考点解析 摘要:本文汇总了30道大数据开发面试高频题目,涵盖Hadoop生态、Spark、Flink、Kafka等核心组件。重点包括:1)HDFS架构与特性(5V特征、副本机制);2)MapReduce/Spark原理(Shuffle过程、RDD抽象);3)实时计算(Kafka消费组、Flink Watermark);4)数据仓库设计(分层模型、性能优化)。特别强调数据倾斜、小文件问题等实战场景的解决方案,以及从日志、资源等多维度排查任务异常的方法。掌握这些基础原理和典型问题应对策略,是应对大

不务正业的猿 450

手把手保姆级|Python爬取微信公众号文章完整版,反反爬策略拉满,附可运行完整代码(永久可用)

做Python爬虫的朋友都知道,爬取微信公众号文章 绝对是爬虫领域的「香饽饽」也是「硬骨头」。一方面,微信公众号的文章是极具价值的数据源:不管是自媒体从业者做竞品分析、新媒体运营者整理干货、还是个人学习收集资料,都需要批量爬取公众号文章;另一方面,微信的反爬机制堪称全网最严苛之一 ——腾讯对微信生态的风控做到了极致,动态渲染页面、高频IP封禁、Cookie短时效失效、请求头严格校验、自动化工具秒识别、频繁请求直接拉黑,这些反爬手段让90%的爬虫新手望而却步:要么爬了几篇就被封IP,要么Cookie失效爬取中

专注于Python爬虫开发,分享爬虫技巧、项目实战与反爬经验,使用Scrapy、BeautifulSoup等工具,解决数据抓取难题。 2626

Java、Hibernate(JPA)常用注解整理

Java、Hibernate(JPA)常用注解整理

简约人生的博客 5001

OCS2 入门教程(一)

OCS2 是专为切换系统优化控制(ptimalontrol forwitchedystems,OCS2)定制的 C++ 工具箱。该工具箱提供以下算法的高效实现:SLQ:连续时间域约束 DDPiLQR:离散时域约束 DDPSQP:基于 HPIPM 的多重打靶算法IPM: 基于非线性内点法的多重搜索算法SLP:基于 PIPG 的顺序线性规划算法OCS2 通过增强拉格朗日法(Augmented Lagrangian)或松弛障碍法(relaxed barrier methods)处理一般路径约束。

机器人控制与仿真应用 7837

笔记整理hibernate的关系注解

类注解 @Entity @Table(name = "emp") 所关联的表 在类前面添加该两个注解 主键注解 @Id @Column(name = "表里主键名") @GeneratedValue(generator = "定义主键值的名字") @GenericGenerator(name = "定义主键值的名字",strategy = "increment")定义主键值按...

qq_38963095的博客 183

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

Hibernate 注解整理

package com.yuxinglab.admin.model; import javax.persistence.Entity; import javax.persistence.GeneratedValue; import javax.persistence.Id; import javax.persistence.JoinColumn; import javax.pers...

江雨行的博客 215

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

hibernate注解

建档整理了下hibernate的注解: 待整理中......

186

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

Hibernate注解整理

1.类级别注解 @Entity     映射实体类 @Table    映射数句库表 @Entity(name="tableName") - 必须,注解将一个类声明为一个实体bean。 属性: name - 可选,对应数据库中的一个表。若表名与实体类名相同,则可以省略。 @Table(name="",catalog="",schema="")  - 可选,通常和@Entity 

qaz307813859的专栏 500

hibernate注解实例【整理】

@OneToOne t_card (  `cardId`,  `cardNumber`)  t_person(  `personId`,  `personName` ,  `cid`)   public class Person {     private Card    card; /**     * @OneToOne:一对一关联       * cascade:级联,

码农的田园 492

Hibernate注解整理笔记

@Temporal(TemporalType.DATE) :指定日期时间的类型 @Transient:指定属性不需要映射 @Batch :批量操作 指定主键并自增 、@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "gen") @SequenceGenerator(name = "gen", sequence

乐于学习、乐于分享、乐于总结 1090

整理笔记---Hibernate的Annotation(注解)

Hibernate的Annotation(注解) 【简单的配置】 User.javapackage com.xing.annotation.entity;import javax.persistence.*; import java.util.Date;/** * @Entity:让当前的类被数据库所管理(注意这里导入的jar包不是Hibernate的包) * @Table:设置在数据库中要

好看的皮囊千篇一律有趣的灵魂万里挑一 445

hibernate+spring 注解 对事务的一些信息 (还没有整理)

事务注解说明@Transactional 类事务说明机制 @Transactional(noRollbackFor=RuntimeException.class) 方法事务说明@TRacsactional(RollbackFor=Exception.class)@Tracsactional(readOnly=true);@Tracsactional(timeout=100)@Tracsaction...

weixin_30663391的博客 162

注解-Spring 2.5 JPA hibernate 使用方法的点滴整理(六)

每个持久化POJO类都是一个实体Bean, 通过在类的定义中使用 @Entity 注解来进行声明。 声明实体Bean @Entity public class Flight implements Serializable { Long id; @Id public Long getId() { return id; } public void setId(Long id...

iteye_9118的博客 222

Hibernate关系(双向一对一、一对多、多对多和自身多对多)映射注解整理

1. 一对一(OneToOne) Preplan表(对应表) @Entity @Table(name = "PRE_PREPLAN") public class Preplan{ //省略其他属性... private Reviews review;// @OneToOne(mappedBy="preplanSn",fetch=FetchType.EAGER,ca

qssn的博客 980

注解的力量 -----Spring 2.5 JPA hibernate 使用方法的点滴整理(六): 一些常用的数据库 注解

一、 实体 Bean每个持久化POJO类都是一个实体Bean, 通过在类的定义中使用 @Entity 注解来进行声明。声明实体Bean@Entitypublic class Flight implements Serializable {  Long id;  @Id  public Long getId() { return id; }  public void setId(Long id) {

一个烂人的随手笔记 1万+

java开发常用注解

用于抑制泛型可变参数(varargs)的类型安全警告。指定注入的Bean名称,解决多个同类型Bean的冲突。将方法返回值序列化为HTTP响应体(如返回JSON)。标记数据访问层(DAO层)组件,自动处理数据库异常。标记类、方法或字段已过时,使用时编译器会生成警告。自动注入依赖(推荐改用构造器注入,但注解仍常见)。标记接口为函数式接口(仅允许一个抽象方法)。标记业务逻辑层(Service层)组件。配置主键生成策略(如自增、UUID)。标记为Spring管理的通用组件。在配置类中声明方法返回的Bean。

Pretty_TokaiTeio的博客 1161

注解的力量 -----Spring 2.5 JPA hibernate 使用方法的点滴整理(二):进一步消除 hibernate.cfg.xml

通过上面一步骤。我们简化了hibernate中扰人的 xxxxx.hbm.xml文件。那么是否可以再进行简化呢?那么,我们在这一步骤的目的,就是把整个 hibernate.cfg.xml都给简化了。依然是利用注解注入的方式。通过jpa 我们可以把 hibernate.cfg.xml中那些 mapping classes再次简化与无形。在applicationContext.xml中进行如下配置"1

一个烂人的随手笔记 8807
下一篇: springMVC整合swagger
chapterchou
博客等级 码龄11年 41粉丝 23原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值