Hibernate注解

/**
*
* @author liuguangyi
* @content ejb3注解的API定义在javax.persistence.*包里面。
*
* 注释说明:
* @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中的序列)。
* @SequenceGenerator —— 注解声明了一个数据库序列。该注解有如下属性
* name 表示该表主键生成策略名称,它被引用在@GeneratedValue中设置的“gernerator”值中
* sequenceName 表示生成策略用到的数据库序列名称。
* initialValue 表示主键初始值,默认为0.
* allocationSize 每次主键值增加的大小,例如设置成1,则表示每次创建新记录后自动加1,默认为50.
* @GenericGenerator —— 注解声明了一个hibernate的主键生成策略。支持十三种策略。该注解有如下属性
* name 指定生成器名称
* strategy 指定具体生成器的类名(指定生成策略)。
* parameters 得到strategy指定的具体生成器所用到的参数。
* 其十三种策略(strategy属性的值)如下:
* 1.native 对于orcale采用Sequence方式,对于MySQL和SQL Server采用identity(处境主键生成机制),
* native就是将主键的生成工作将由数据库完成,hibernate不管(很常用)
* 例:@GeneratedValue(generator = "paymentableGenerator")
* @GenericGenerator(name = "paymentableGenerator", strategy = "native")
* 2.uuid 采用128位的uuid算法生成主键,uuid被编码为一个32位16进制数字的字符串。占用空间大(字符串类型)。
* 例:@GeneratedValue(generator = "paymentableGenerator")
* @GenericGenerator(name = "paymentableGenerator", strategy = "uuid")
* 3.hilo 要在数据库中建立一张额外的表,默认表名为hibernate_unque_key,默认字段为integer类型,名称是next_hi(比较少用)
* 例:@GeneratedValue(generator = "paymentableGenerator")
* @GenericGenerator(name = "paymentableGenerator", strategy = "hilo")
* 4.assigned 在插入数据的时候主键由程序处理(很常用),这是<generator>元素没有指定时的默认生成策略。等同于JPA中的AUTO。
* 例:@GeneratedValue(generator = "paymentableGenerator")
* @GenericGenerator(name = "paymentableGenerator", strategy = "assigned")
* 5.identity 使用SQL Server和MySQL的自增字段,这个方法不能放到Oracle中,Oracle不支持自增字段,要设定sequence(MySQL和SQL Server中很常用)。等同于JPA中的IDENTITY
* 例:@GeneratedValue(generator = "paymentableGenerator")
* @GenericGenerator(name = "paymentableGenerator", strategy = "identity")
* 6.select 使用触发器生成主键(主要用于早期的数据库主键生成机制,少用)
* 例:@GeneratedValue(generator = "paymentableGenerator")
* @GenericGenerator(name = "paymentableGenerator", strategy = "select")
* 7.sequence 调用谨慎数据库的序列来生成主键,要设定序列名,不然hibernate无法找到。
* 例:@GeneratedValue(generator = "paymentableGenerator")
* @GenericGenerator(name = "paymentableGenerator", strategy = "sequence",
* parameters = { @Parameter(name = "sequence", value = "seq_payablemoney") })
* 8.seqhilo 通过hilo算法实现,但是主键历史保存在Sequence中,适用于支持Sequence的数据库,如Orcale(比较少用)
* 例:@GeneratedValue(generator = "paymentableGenerator")
* @GenericGenerator(name = "paymentableGenerator", strategy = "seqhilo",
* parameters = { @Parameter(name = "max_lo", value = "5") })
* 9.increnment 插入数据的时候hibernate会给主键添加一个自增的主键,但是一个hibernate实例就维护一个计数器,所以在多个实例运行的时候不能使用这个方法。
* 例:@GeneratedValue(generator = "paymentableGenerator")
* @GenericGenerator(name = "paymentableGenerator", strategy = "increnment")
* 10.foreign 使用另一个相关的对象的主键。通常和<one-to-one>联合起来使用。
* 例:@Id
* @GeneratedValue(generator = "idGenerator")
* @GenericGenerator(name = "idGenerator", strategy = "foreign",
* parameters = { @Parameter(name = "property", value = "info") })
* Integer id;
* @OneToOne
* EmployeeInfo info;
* 11.guid 采用数据库底层的guid算法机制,对应MySQL的uuid()函数,SQL Server的newid()函数,ORCALE的rawtohex(sys_guid())函数等
* 例:@GeneratedValue(generator = "paymentableGenerator")
* @GenericGenerator(name = "paymentableGenerator", strategy = "guid")
* 12.uuid.hex 看uudi,建议用uuid替换
* 例:@GeneratedValue(generator = "paymentableGenerator")
* @GenericGenerator(name = "paymentableGenerator", strategy = "uuid.hex")
* 13.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") })
*
* @OneToOne 设置一对一个关联。cascade属性有五个值(只有CascadeType.ALL好用?很奇怪),分别是CascadeType.PERSIST(级联新建),CascadeType.REMOVE(级联删除),CascadeType.REFRESH(级联刷新),CascadeType.MERGE(级联更新),CascadeType.ALL(全部四项)
* 方法一
* 主表: ?@OneToOne(cascade = CascadeType.ALL)
* @PrimaryKeyJoinColumn
* public 从表类 get从表类(){return 从表对象}
* 从表:没有主表类。
* 注意:这种方法要求主表与从表的主键值想对应。
* 方法二
* 主表:?@OneToOne(cascade = CascadeType.ALL)
* @JoinColumn(name="主表外键") //这里指定的是数据库中的外键字段。
* public 从表类 get从表类(){return 从表类}
* 从表:@OneToOne(mappedBy = "主表类中的从表属性")//例主表User中有一个从表属性是Heart类型的heart,这里就填heart
* public 主表类 get主表类(){return 主表对象}
* 注意:@JoinColumn是可选的。默认值是从表变量名+"_"+从表的主键(注意,这里加的是主键。而不是主键对应的变量)。
* 方法三
* 主表:@OneToOne(cascade=CascadeType.ALL)
* @JoinTable( name="关联表名",
* joinColumns = @JoinColumn(name="主表外键"),
* inverseJoinColumns = @JoinColumns(name="从表外键")
* )
* 从表:@OneToOne(mappedBy = "主表类中的从表属性")//例主表User中有一个从表属性是Heart类型的heart,这里就填heart
* public 主表类 get主表类(){return 主表对象}
* @ManyToOne 设置多对一关联
* 方法一
* @ManyToOne(cascade={CasCadeType.PERSIST,CascadeType.MERGE})
* @JoinColumn(name="外键")
* public 主表类 get主表类(){return 主表对象}
* 方法二
* @ManyToOne(cascade={CascadeType.PERSIST,CascadeType.MERGE})
* @JoinTable(name="关联表名",
* joinColumns = @JoinColumn(name="主表外键"),
* inverseJoinColumns = @JoinColumns(name="从表外键")
* )
* @OneToMany 设置一对多关联。cascade属性指定关联级别,参考@OneToOne中的说明。fetch指定是否延迟加载,值为FetchType.LAZY表示延迟,为FetchType.EAGER表示立即加载
* 方法一 使用这种配置,在为“一端”添加“多端”时,不会修改“多端”的外键。在“一端”加载时,不会得到“多端”。如果使用延迟加载,在读“多端”列表时会出异常,立即加载在得到多端时,是一个空集合(集合元素为0)。
* “一端”配置
* @OneToMany(mappedBy="“多端”的属性")
* public List<“多端”类> get“多端”列表(){return “多端”列表}
* “多端”配置参考@ManyToOne.
* 方法二
* “一端”配置
* @OneToMany(mappedBy="“多端”的属性")
* @MapKey(name="“多端”做为Key的属性")
* public Map<“多端”做为Key的属性的类,主表类> get“多端”列表(){return “多端”列表}
* “多端”配置参考@ManyToOne.
* 方法三 使用这种配置,在为“一端”添加“多端”时,可以修改“多端”的外键。
* “一端”配置
* @OneToMany
* @JoinColumn(name="“多端”外键")
* public List<“多端”类> get“多端”列表(){return “多端”列表}
* “多端”配置参考@ManyToOne.

相关推荐

SFT看这一篇就够了!万字长文:监督微调(Supervised Fine-Tuning, SFT)技术全解析【从理论到实战】

大家好,我是大 F,深耕AI算法十余年,互联网大厂技术岗。分享AI算法干货、技术心得。欢迎关注,一起探索技术的无限可能!

大F子的智能小课 686

Spring + Hibernate 使用注解方式和配置文件方式映射实体类时spring_hibernate.xml 配置

Spring + Hibernate 使用注解方式和配置文件方式映射实体类时spring_hibernate.xml 配置

阿飞 2464

Hibernate注解实战详解

本文还有配套的精品资源,点击获取 简介:Hibernate是一个开源的对象关系映射(ORM)框架,使用注解可以简化Java开发者与数据库的交互。文章将详细讲解Hibernate注解的基本概念、主键注解、数据库表注解、字段注解、关联注解以及注解配置的优点,并通过实例演示注解的使用,旨在帮助开发者提高数据库操作的效率和灵活性。 1. Hibernate注解基础概念 ...

weixin_42506884的博客 1919

hibernate多对多注解配置

上一篇文章主要讲解了Hibernate多对多配置文件的配置方法,接下来继续讲解注解方式配置多对多关系的方法。注解功能已经加入hibernate4之中了,但hibernate3要使用注解配置还需要另外引入jar包。 需要的jar包可见附件:   接下来开始进入正题: 一、第一种直接配置多对多关系,以Role角色-Right权限为例。   Role类代码   import java....

zhangjunli的博客 1077

hibernate中的@GeneratedValue与@GenericGenerator

1、GeneratedValue与GenericGenerator的区别 @GeneratorValue注解----JPA通用策略生成器 @GenericGenerator注解----自定义主键生成策略 一个是通用的一个是自定义的这就是他们的区别。 2、@GeneratorValue注解----JPA通用策略生成器 GeneratorValue属于

fendo 7万+

Hibernate注解详解(超全面)

我们总是喜欢瞻仰大厂的大神们,但实际上大神也不过凡人,与菜鸟程序员相比,也就多花了几分心思,如果你再不努力,差距也只会越来越大。实际上,作为程序员,丰富自己的知识储备,提升自己的知识深度和广度是很有必要的。我们总是喜欢瞻仰大厂的大神们,但实际上大神也不过凡人,与菜鸟程序员相比,也就多花了几分心思,如果你再不努力,差距也只会越来越大。实际上,作为程序员,丰富自己的知识储备,提升自己的知识深度和广度是很有必要的。

2401_84048034的博客 976

hibernate注解

/** * * 注释说明: * @Entity —— 将一个类声明为一个实体bean(即一个持久化POJO类) * @Id —— 注解声明了该实体bean的标识属性(对应表中的主键)。 * @Table —— 注解声明了该实体bean映射指定的表(table),目录(catalog)和schema的名字 * @Column —— 注解声明了属性到列的映射。该注解有如下的属性 * n...

ruan2012的专栏 153

Hibernate 框架学习——Hibernate注解

前言 在Hibernate中我们一般都会使用注解,这样可以帮助我们大大简化hbm映射文件的配置。下面我就来为大家详细介绍。 PO类注解配置 首先肯定是搭建好Hibernate的开发环境啦,我在此也不过多赘述,读者自行实践。接着在src目录下创建一个cn.itheima.domain包,并在该包下创建一个Book实体类,由于Book实体类中写有注解配置,所以就不用编写那个映射配置文件啦! ...

热心网友 8549

Hibernate注解开发

Hibernate注解开发在Hibernate中我们一般都会使用注解,这样可以帮助我们大大简化hbm映射文件的配置。下面我就来为大家详细介绍。PO类注解配置首先肯定是搭建好Hibernate的开发环境啦,我在此也不过多赘述,读者自行实践。接着在src目录下创建一个cn.itheima.domain包,并在该包下创建一个Book实体类,由于Book实体类中写有注解配置,所以就不用编写那个映射配置文件啦

李阿昀的博客 6129

Hibernate 注解 annotation

Hibernate 注解 annotation 博客分类:  Hibernate HibernateBeanSQL嵌入式数据结构 一、 实体 Bean 每个持久化POJO类都是一个实体Bean, 通过在类的定义中使用 @Entity 注解来进行声明。 声明实体Bean @Entity public class Flight implements Se

lidongtang的专栏 1288

Hibernate注解

Hibernate注解注解是什么?不使用注解时,用hbm.xml文件进行配置使用注解时,直接在实体类上进行配置多对一注解一对多注解多对多注解关于cid等字段是存在哪个表中的问题?(在多的那一方中)Hibernate注解 VS Hibernate的XML 注解是什么? Hibernate注解是什么? 简单的说,本来放在hbm.xml文件里的映射信息,现在不用配置文件做了,改由注解来完成...

有幸添砖java 153

hibernate注解

使用hibernate注解的目的—-为了简化繁琐的ORM映射文件(*.hbm)的配置JPAHibernate的关系 JPA全称 Java Persistence API; JPA注解是javaee的规范与标准。 JPA 是标准的接口,hibernate是实现,但是hibernate功能更强大,是JPA 的超集。 hibernate通过三个组件来实现与jpa的关系;分别为hibernate-anno

qq_40132994的博客 405

hibernate mysql 注解_Hibernate注解之基本注解注解使用

Hibernate注解之基本注解注解使用使用注解须知我们在使用注解自动创建表的时候,系统会默认为我们创建一张表Hibernate_sequence,我们可以在Hibernate.cfg.xml文件中添加如下语句解决问题false类级别注解@Entity : 映射实体类,其中有一个name属性指定当前实体类映射的表的名称name: 可选属性 ,指定对应表的名称,如果没有指定name属性,那么创建表...

weixin_31597865的博客 258

Hibernate注解开发之属性级别的注解

回顾 Hibernate注解开发之类级别的注解 属性级别注解 @Id     必须, 表示映射到数据库表中的主键的属性, 一个实体类可以有一个或多个属性被映射为主键, 可置于主键属性或者getXxx()方法上     如果一个类中有多个属性被定义为主键, 则该实体类必须实现Serializable接口 @GeneratedValue(strategy = "")     ① stra...

C8WATER 557

Hibernate注解方法的使用

1、配置映射关系的xml方式我们知道,Hibernate是一个典型的ORM框架,用以解决对象和关系的不匹配。其思想就是将关系数据库中表的记录映射成为对象,以对象形式展现,这样一来,就可以把对数据库的操作转化为对对象的操作。而ORM一般是采用xml的格式保存对象与关系数据表的映射,我们也可以从下面示例中看到hibernate中的一个映射配置表的表现形式:<?xml version="1.0" ...

weixin_30388677的博客 219

9_hibernate基础配置_注解

以下讲解部分注解的作用,其中需要在xml中修改的注解,在下图中展示: 1、当表明和类名不一致时,增加注解@table(name="sqlTableName")(from:javax.persistence)    package com.mym.hibernate.model; import javax.persistence.Entity; import javax.persi

Mr_machicao的博客 428

注解的力量 -----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

2771

Hibernate 注解配置

近几年来,注解方式的配置因其简单易用的特点深受广大程序员的青睐,Hibernate也添加了对注解配置的支持。接下来我们就以论坛系统为例来讲解基于注解配置实体类和表的映射关系,以及实体和实体的关联关系。核心技能部分 1.1 创建SessionFactory基于xml配置的配置信息位于实体类映射文件中,如Category.hbm.xml;基于注解配置配置信息位于类源代码中,如Category.clas...

张晨光老师的播客 4686

2000-2021年 全国各地区农业农村相关指标(乡村人口、农业产值、农作物产量)数据

三农指农业农村农民问题,是关系国计民生的基本性问题,解决好三农问题是全党工作重中之重,实施乡村振兴战略,全面推进乡村振兴,优先发展农业农村是国务院发布中央一号文件重要内容,对优先发展三农工作指明了方向。本数据整理全国各省直辖市自治区农业农村378个相关指标,主要围绕农村人口,农村农业产值,畜牧业,养殖业等产值,农业机械数量,经营耕地、山地、养殖、农作物种植面积,农作物、水果、农产品、畜牧产量数据,统计年份从2000年至2021年682条数据统计。数据指标:乡镇数、村民委员会数、乡村人口、乡村从业人员、农林牧渔业总产值、农业林渔业增加值、化肥施用折纯量、乡村办水电站个数、农村用电量、农业机械数量,经营耕地、山地、养殖、农作物种植面积,农作物、水果、农产品、畜牧产量。参考文献:陈卫平,赵彦云.中国区域农业竞争力评价与分析——农业产业竞争力综合评价方法及其应用[J].管理世界,2005(03):85-93.谭燕芝,彭千芮.普惠金融发展与贫困减缓:直接影响与空间溢出效应[J].当代财经,2018(03):56-67.

上一篇: hibernate的2个异常
java_hql
博客等级 码龄15年 0粉丝 14原创
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值