Hibernate知识总结

Hibernate习题知识点总结 级联删除时,cascade属性是(C )。 A. all B. save C. delete D. save-update 以下不属于Cascade的属性取值的有( B)。 A. all B. save C. delete D. save-update 知识点:级联属性的取值none(默认),delete,all,save-update。 Inserve,mappedBy 关于H... 阅读详情
  

1.     hibernate3.0需要的包

包的介绍:
http://hi.baidu.com/magicalboy/blog/item/394eb0196079f24f43a9ad87.html

补充: java日志,需要知道的几件事(commons-logging,log4j,slf4j,logback)

http://singleant.iteye.com/blog/934593

2.     配置文件:

<property name=”show_sql”>true</property>

<property name=”hbm2ddl.auto”>update</property>

<property name=”current_session_context_class”>thread</property>

<property name=’format_sql>true</property>//sql显示好看些

对应hibernate.hbm2ddl.auto的值

create:表示启动的时候先drop,再create

create-drop: 也表示创建,只不过再系统关闭前执行一下drop

update: 这个操作启动的时候会去检查schema是否一致,如果不一致会做scheme更新(用的多)

validate: 启动时验证现有schema与你配置的hibernate是否一致,如果不一致就抛出异常,并不做更新

除了使用<property name=”show_sql”>true</property>之外用

new SchemaExport (new AnnotaitionConfiguratio­n().configure().create(false,true)//一个false,一个true,两个true就会重复打印

使用getCurrentSession需要制定session的上下文
<property name=”current_session_context_class”>thread</property>

3.      一些注解:
@GeneratedValue(stratery=GenerationType.IDENTITY) ID生成策略
// stratery:战略的意思 generator:生成
native:默认的,交给数据库管理.用的最多
increment:用的极少
identity:SQL Server常用
sequence:Oracle数据库常用
uuid:用的极少,需要设置ID的类型是String
ggid:在一个范围
TABLE:自己定义张表
@GeneratedValue(stratery=GenerationType.TABLE,generator=”Teacher_GEN”)

中间生成主键的表举例

@Entity

@javax.persisstence.TableGenerator(

      name=” Teacher_GEN” //引用
      table=”GENERATOR_TABLE”,//中间表的表面

       pkColumnName=”pk_key”,//一个列,默认是key,需要修改,key是关键字

       valueColumnName=”pk_value”,// 另外一个列
    pkColumnValue=”Teacher”, //(暂时不太明白什么意思)

       allocationSize=1   //增量

)

@BeforeClass

@BeforeClass

public static void beforeClass(){sessionFactory = new AnnotationConfiguration.configure(“hibernate.xml”)//如果是”hibernate.cfg.xml”就可以不写参数

@AfterClass

public static void afterClass(){

 sessionFactory.close();}

sessionfactory就是产生session的:

①Session session = SessionFactory.getCurrentSession()//获取session,如果没有就创建.如果有就直接用,事务Commit之后就是不同的Session对象了,在hibernate.cfg.xml中需要定制session的上下文

②Session session = SessionFactory.openSession() //这个永远是创建新的.好像hibernate3.2之后就不太建议使用了,使用openSession()一定要关闭.

二者不能混用

4.Hibernate关联关系映射配置:

  •      一对一单向外键关联和一对一双向外键关联:

@OneToOne:单向外键关联.假如是双向外键关联的话,需要@OneToOne(mapperBy=”wife”)
在xml中双向外键关联

<one-to-one name=”sutIdCard” property-ref=”student”></one-to-one>

  •     一对一单向主键关联, 一对一双向主键关联:不重要

          @PrimaryKeyJoinColumn:主键关联时候用(不常用)

  •  组件映射

注解的3种方式:
a)将组件类注解为@Embeddable(可被嵌入的),并将组件属性注解为@Id

b)将组件类的属性注解为@EmbeddedId  常用

c)将类注解为@IdClass(实体类.class),并将该实体中所有的属性主键都注解为@Id 常用

作为联合主键的类需要implements java.io.Serializable,然后重写equlas()和hashCode

@Override

public boolean euqals (Object o){

 if(o instanceof StudentPK){

StudentPK pk = (StudentPK)o;

if(this.id==pk.getId() && this.name.equals(pk.getName())

 return true;

}

}

return false;}

@Override

public int hashCode(){

  return this.name.hashCode();

}

 

   xml方式

<component name="wife">

           <property name="name" column="WIFENAME" />

           <property name="age" column="AGE" precision="3" />

</component>

  •    多对一单向关联

@ManyToOne

//@JoinColumn(name=””)//可以指定外键名称

  •  一对多单向关联 

@OneToMany

@JoinColumn(name="HOUSE_ID")//不加会生成由一张中间表连接的共三张表

  •  一对多、多对一双向关联
    一方: @ManyToOne//如果需要指定外键字段使用  @JoinColumn(name="PERSON_ID") 另一方: @OneToMany(mappedBy="person")//参考了对方的属性名
  •   多对多单向关联

    @ManyToMany

    @JoinTable(

           name="H_T_S",//指明中间表的名字

           joinColumns={@JoinColumn(name="TEACHER_ID", referencedColumnName="ID")},

//指明中间表参考当前类对应数据库表中的字段ID的外键名为TEACHER_ID

        inverseJoinColumns={@JoinColumn(name="STUDENT_ID",referencedColumnName="ID")}

//指明中间表参考另外一张表中的字段ID的外键名为STUDENT_ID

    )

 

  •  多对多双向关联

@ManyToMany(mappedBy="students")

@ManyToMany

@JoinTable(

           name="H_T_S",//指明中间表的名字

       joinColumns={@JoinColumn(name="TEACHER_ID",

referencedColumnName="ID")},

//指明中间表参考当前类对应数据库表中的字段ID的外键名为TEACHER_ID

           inverseJoinColumns={@JoinColumn(name="STUDENT_ID",

referencedColumnName="ID")}

//指明中间表参考另外一张表中的字段ID的外键名为STUDENT_ID

    )

 

在@OneToMany和@ManyToOne中:

caascade用的最多是(@ManyToOne(cascade={CascadeType.ALL})

fetch:@OneToMany默认是(fetch=FetchType.LAZY)
         @ManyToOne默认是(fetch=FetchType.EAGER)
         @OrderBy 默认按照主键排序

@MapKey(name=”id”) map类型时候,需要一个MapKey只有一个属性
Inheritance mapping:3种方式

(1)、每个具体类(非抽象类)对应一个表:此方式中关系数据模型完全不支持对象的继承关系。

(2)、基类(根类)对应一个表:此方式中对关系数据模型进行非常规设计,在数据库表中加入额外的区分子类的字段,从而使关系数据模型可以支持继承关系。

(3)、每个类对应一个表:此方式中在关系数据模型中用外键关系来表示继承关系。

HQL查询:不解释

Query接口:
Query q = session.createQuery("from Category");
Query q = s.createSQLQuery("select * from user").addEntity(User.class);

5.三种状态:

6.session的方法:

load()是产生一个代理.需要时才发送sql语句,需要有session对象
get()马上发送sql语句
update()默认更新所有字段.使用update需要使用制定ID,所以不能是瞬时态,如果想更新制定字段
在xml中

<property name =”name update=”true/flase”></property>

在注解中

@column(updatable=false

public String getTitle(){

  return title;

}

但是一般是使用dynamic-update=”ture”,这个就是只更新改变过的字段.但是它只是在一个session中起作用.想跨session需要用merge();

哈哈.但是还是没有必要这么麻烦直接用HQL语句就行了

“update Student s set s.name=’billy’ where s.id=”1”)//秒杀前面的所以

clear():直接清除缓存
flush():是缓存和数据库同步,涉及到一个session.setFlushMode(FlushMode.XXX)
save();delete();saveOrUpdate();

1+N问题:
①设置fetch取值为lazy②@BatchSize(size=5)③加连接jion fetch

但是网上是这么讲的

1 )lazy=true, hibernate3开始已经默认是lazy=true了;lazy=true时不会立刻查询关联对象,只有当需要关联对象(访问其属性,非id字段)时才会发生查询动作。

2)使用二级缓存, 二级缓存的应用将不怕1+N 问题,因为即使第一次查询很慢(未命中),以后查询直接缓存命中也是很快的。刚好又利用了1+N 。

3) 当然你也可以设定fetch="join",一次关联表全查出来,但失去了懒加载的特性。

list和iterate不同之处:

l        list取所有(内存开销大)

l        iterate先取ID,等用到的时候在根据ID来取对象

l        在session中list第二次发出,仍会到数据库查询

l        iterate第二次的时候,先找session级缓存

Hibernate的缓存:

l        一级缓存是session级别的缓存

l        二级缓存是SessionFactory级别的缓存,可以跨越session存在

l        三级缓存是查询缓存

l        如果要使用二级缓存
在hibernate.cfg.xml中

<property name=cache.user_second_level_cache”>true</property>
<property name=”cache.provider_class”>org.hibernate.cache.EhCachePro
vider</property>

还要ehcache的jar包和配置相应的文件ehcache.xml
在ehcache.xml中可以了解的

<defaultCache

maxElementsMemory=”10000”

eternal=”false”

timeToIdleSeconds=”120”

timeToLiveSeconds=”120”

overflowDisk=”True” //需要指定溢出时候的路径

/>
<diskStore path=”java.io.tmpdir”>

 对于缓存算法:LRU,LFU,FIFO不解释

@Cache注解使用:不解释

l        load()默认是用二级缓存,iterate默认使用二级缓存,list默认往二级缓存存入数据,但是查询的时候不使用

l        如果要query用二级缓存,需打开查询缓存

<property name=”cache.use_query_cache”>true</property>

7.事务处理:
原子性,一致性,独立性,持久性
事务中会出现的常见问题:脏读,不可重复读,幻读
数据库的事务处理机制:read-uncommitted;read-committed;repeatable read;serializable;

但是综合效率一般呢.是用read-committed.但是还是有问题.所以我们结合hibernate的悲观锁和乐观锁配合完成

①悲观锁:用lockMode.UPGRADE_NOWAIT

 

String hqlStr ="from TUser as user where user.name='Erica'";

Query query = session.createQuery(hqlStr);

query.setLockMode("user",LockMode.UPGRADE); // 加锁

List userList = query.list();// 执行查询,获取数据

 

 

 

 

 

hibernate的加锁模式:

LockMode.NONE: 无锁机制。
LockMode.WRITE: Hibernate 在 Insert 和 Update 记录的时候会自动获取。
LockMode.READ : Hibernate 在读取记录的时候会自动获取。
以上这三种锁机制一般由 Hibernate 内部使用,如 Hibernate 为了保证 Update过程中对象不会被外界修改,会在 save 方法实现中自动为目标对象加上 WRITE 锁。
LockMode.UPGRADE :利用数据库的 for update 子句加锁。
LockMode. UPGRADE_NOWAIT: Oracle 的特定实现,利用 Oracle 的 for update nowait 子句实现加锁。

②乐观锁:大多是基于数据版本( Version )记录机制实现
optimistic-lock="version"

8.小常识:

hibernate3.5支持jpa
ibatis不支持jpa
JIT: Compiler(Just-in-time Compiler) 即时编译
flex: flex只是一个写actionscript3.0脚本的软件,AS不解释
C3P0:是一个开源的JDBC连接池
JNDI:(Java Naming and Directory Interface,Java命名和目录接口)是一组在Java应用中访问命名和目录服务的API
jsf: JavaServer Faces(JSF) 是一种标准的 J2EE 表示层的技术,其  主旨是为了使 Java 开发人员能够快速的开发基于 Java 的 Web 应用程序。它不同于其它 Java 表示层技术的最大优势是其采用的组件模型,事件驱动!

 

【QGIS】利用“创建网格”功能实现区域等距分割与坐标转换实战 本文详细介绍了如何在QGIS中使用“创建网格”工具实现区域等距分割。通过实战演示,将北京市行政区划切割为150米正方形网格,并重点讲解了关键步骤:选择投影坐标系EPSG:3857以确保网格尺寸精确,以及将结果转换为常用的WGS84经纬度坐标。文章还涵盖了进阶技巧与常见问题解决方案,帮助用户高效完成空间网格化分析任务。 阅读详情

相关推荐

告别卡顿!用AVPro Video在Unity 2022.3里流畅播放4K视频的保姆级配置流程

本文详细介绍了如何在Unity 2022.3中使用AVPro Video插件实现4K视频的流畅播放。从环境配置、插件选型到核心性能优化技巧,包括解码器设置、内存管理策略和多平台适配方案,帮助开发者彻底解决卡顿问题,提升视频播放体验。

weixin_32349561的博客 319

jpa下hibernate的ddl-auto的各种属性

在jpa中ddl-auto一共有四种,分别为: ddl-auto:create ----每次运行该程序,没有表格会新建表格,表内有数据会清空; ddl-auto:create-drop ----每次程序结束的时候会清空表 ddl-auto:update ---- 每次运行程序,没有表格会新建表格,表内有数据不会清空,只会更新 ddl-auto: validate ---- 运行程序会校验数据与数据库的字段类型是否相同,不同会报错。 spring.jpa.hibernate.ddl-auto=create

科技互联网领域深度探索者,乐于分享与写作。 5954

多臂老虎机——入门强化学习

多臂老虎机(Multi-Armed Bandit,MAB)问题是强化学习的经典入门例子,也是理解探索与利用(exploration-exploitation)平衡的重要案例。

qq_56683019的博客 2461

spring-boot工程中,jpa下hibernate的ddl-auto的各种属性

jpa: hibernate: ddl-auto: createddl-auto:create----每次运行该程序,没有表格会新建表格,表内有数据会清空ddl-auto:create-drop----每次程序结束的时候会清空表ddl-auto:upadte----每次运行程序,没有表格会新建表格,表内有数据不会清空,只会更新ddl-auto:validate----运行程序会校验数据...

万里飞鹏的博客 5万+

GPS系统跟踪捕获算法的Verilog实现在FPGA

本文将介绍GPS系统中的跟踪捕获算法,并提供该算法的Verilog实现在FPGA上运行的源代码。常用的方法是将接收到的信号与一个本地振荡器产生的参考信号进行混频,然后使用带通滤波器提取出希望得到的频率分量。码跟踪的目的是通过检测接收到的信号中的码片序列来实现对导航数据的解调。以上是一个简化的GPS系统跟踪捕获算法的Verilog实现,其中包含了时间检测、频率跟踪和码跟踪三个模块。GPS信号由载波频率和导航数据组成。跟踪捕获算法的目标是通过对接收到的信号进行处理,从而获取到准确的载波频率和导航数据。

PixelEnigma的博客 1108

芯片原厂linux驱动开发的分享

大家好,我是XX,来自湖南XX学院,电子信息18级,也曾在创新基地控制组学习过两三年,毕业后就职于一家芯片原厂的解决方案部,担任驱动工程师的职位,算上实习期,我的工作时长已有两年。在此我想将这两年期间学习与积累到的一些经验输出出来,与大家一同分享。知识面有限,只能简单介绍一些驱动开发方向的一些经验,且由于经验尚浅,文中难免会有一些疏漏和错误之处,还请大家积极地批评指正。

嵌入式技术开发 850

JPA之ddl-auto属性选择

JPA中ddl-auto属性一共有四种: 名称 描述 ddl-auto:create 每次运行该程序,没有表格会新建表格,表内有数据会清空 ddl-auto: create-drop 每次程序结束的时候会清空表 ddl-auto: update 每次运行程序,没有表格会新建表格,表内有数据不会清空,只会更新 ddl-auto: validate 运行程序会校验数据与数据库的字段类型是否相同,不同会报错 总结 由于ddl-auto不能同时指定多个属性, 只能在create,

段占彪的博客 3740

AutoSAR配置与实践(基础篇)3.2 BSW中的I/O架构和模块详解

车门位置传感器(Sensor SWC)输出的电流信号经过了一系列处理,如先被转化为电压信号,后又经ADC转换为数字信号,但是IoHwAb模块对上层隐藏了这一系列处理过程,并将数据直接抽象为它的输出接口,即车门开关状态接口。Sensor SWC 使用RTE接口直接从IoHwAb模块封装的车门开关状态,SWC它并不关心ECU硬件是如何实现的传感器电流采集,也不关心MCU ADC采样精度(如10/12位)IoHwAb把采集的电压抽象为开关状态,使得Sensor SWC不依赖具体的ECU硬件。

nihaoljq2010的博客 1300

springdata jpa之ddl-auto配置的属性

在jpa中ddl-auto一共有四种: 分别为: ddl-auto:create ----每次运行该程序,没有表格会新建表格,表内有数据会清空; ddl-auto:create-drop ----每次程序结束的时候会清空表 ddl-auto:update ---- 每次运行程序,没有表格会新建表格,表内有数据不会清空,只会更新 ddl-auto: validate ---- 运行程序会校验数据与数...

qq_45289792的博客 1097

微信支付PHP集成指南

完整实现建议参考微信支付官方文档,包含更多支付场景(H5支付、Native支付等)和安全性处理细节。微信支付在PHP中的集成主要涉及服务端接口的调用和支付流程的实现。

bqq506615054的专栏 160

雨雾天YOLOv8检测拉胯?暗通道去雾+上下文注意力双优化,mAP从58%飙到79%,暴雨也能看清车牌

室外交通监控:高速、省道的雨雾天检测,重点解决小车、货车漏检;车载ADAS系统:雨天行车时的前方车辆、行人识别,需实时性(<40ms);隧道出入口:明暗交界+雾天的复杂场景,暗通道能平衡亮度。

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

Hibernate知识点

    软件开发的分层思想: 三层架构:  数据表现层业务逻辑层数据持久层SUN的桌面应用Swing AWT普通Java类JDBCSUN的WEB基本应用JSP

李蓝箫 3438

姿态传感器/陀螺仪之ICM-42670-P应用原理图设计

ICM-42670-P采用LGA-14封装,尺寸为2.5x3x0.76毫米,工作电压范围为1.71V至3.6V,支持I3CSM、I2C和SPI串行通信接口。其设计目标是提供高精度、低功耗和小型化的解决方案,以满足消费类和工业应用的需求。ICM-42670-P是一款由TDK InvenSense推出的高性能六轴MEMS运动追踪传感器,集成了3轴陀螺仪和3轴加速度计,适用于多种应用场景,包括可穿戴设备、游戏控制器、无人机、AR/VR设备等。

corlin6688的博客 1207

Hibernate 的知识点学习

Hibernate 的知识点学习

weixin_45428910的博客 763

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

Hibernate框架知识结构图

Hibernate框架知识结构图

sgkuo的专栏 838

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

Hibernate知识点总结

1.HelloWorld a.xml b.annotation2.Hibernate原理模拟,什么是O/R Mapping以及为什么要有这个?3.常见的O/RKUANGJIAN 4.基础配置5.核心接口介绍6.对象的三种状态7.ID生成策略8.关系映射9.hibernate查询(HQL)10.在struts基础上继续完善项目11.性能优化12.补充话题----------------...

aq9618154的博客 168

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

【Hibernate那点事儿】—— Hibernate知识总结

前言:   上一篇简单的讲解了下Hibernate的基础知识。这里对Hibernate比较重要的一些知识点,进行总结和归纳。   手码不易,转载请注明!——xingoo   总结的知识点:   1 关于hibernate映射的实体类标识符访问权限   2 关于对象描述标识符OID及其生成策略   3 Session缓存——清理缓存   4 Sessi...

weixin_33892359的博客 182

Hibernate基础知识

hibernate是处于持久层的。是对jdbc的包装 POJO对象 轻量级框架的特点:没有侵入性。 Oracle TopLink,JDO,Apache OJB ,EJB(CMP); java是单继承的。 EJB(JPA持久化的规范) Weblogic ibaits——sql映射

Emily的博客 491

HIbernate基础知识积累

   最近复习了一下Hibernate知识体系,特把一些内容摘录下来,以供备用,框架的普通学习进阶二

无戒的专栏 144

hibernate入门知识详解

Hibernate的入门知识 一,hibernate概述 Hibernate 是由JBoss公司著名构架师Gavin King设计,开发的一个开源ORM框架,可以从不同的角度解析Hibernate。 1.     它是连接java应用程序和关系数据库的中间件 2.     它对JDBC  API进行了封装,负责Java对象的持久化 3.     在分层的软件架构中它位于持久化层,封装了所

张晓丛的专栏 977

Hibernate的相关知识

Hibernate的知识点: 1.使用Hibernate的三项准备工作是? 添加Hibernate库,添加Hibernate配置文件,添加对应表的实体类和映射文件。 2.使用Hibernate系统中添加一个表,都有哪些准备工作要做? 添加实体类,添加映射文件,在hibernate.cfg.xml中增加”实体类的hbm.xml的全路径”/> 3.是一个主流的持久化框架,在JDBC基础进行封

snowlLXM的博客 407

Hibernate基础知识总结

这里写自定义目录标题Hibernate基础总结整体结构Hibernate相关的API功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与...

weixin_42585359的博客 375

Hibernate的基本知识

1.框架介绍 2.ORM框架 2.1 数据库回顾 2.2 ORM框架介绍 orm(Object/Relation Mapping):对象-关系映射,java中的对象与数据库中的表,之间的映射关系 ORM功能:提供api操作java对象,ORM自动生成sql,并执行 ORM开发需要完成的事情:编写对象、建立映射关系 3 hibernate 3.1介绍 Hibernat...

weixin_30892763的博客 167

Hibernate 基础知识

Hibernate 基础知识

weixin_45428910的博客 922

Hibernate知识点概述

2.Hibernate 概念理解:Hibernate是一种轻量级对jdbc的封装(dao持久层).Hibernate来完成对jdbc操作.在dao层进行使用.与数据库进行的交互操作     类与表对应,属性与表的字段对应.对象与表中的记录对应 优点:  Hibernate对jdbc访问数据库的代码做了大量的封装.大大简化了数据访问层繁琐的重复性代码 Hiberna

YoungLee16的博客 596
上一篇: struts2知识总结
下一篇: Spring知识总结
billycoder
博客等级 码龄17年 171粉丝 188原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值