java

位置:IT落伍者 >> java >> 浏览文章

Hibernate基础详细分析


发布日期:2021年03月12日
 
Hibernate基础详细分析

Hibernate还是比较常用的于是我研究了一下Hibernate基础在这里拿出来和大家分享一下希望对大家有用

Hibernate基础——删除实体

Session接口提供了一个delete()方法:

Publicvoiddelete(Objectobject)throwsHibernateException

这个方法以一个持久对象作为参数参数也可以是一个具有标识符的瞬时对象这个标识符设置为要删除的对象的id 使用delete()方法时也可以使用级联

Hibernate还支持大批量删除应用程序对数据库执行一个DELETE HQL语句

sessioncreatQuery(deletefromuser)executeUpdate();

这非常适合同时删除多个对象因为不需要仅为了删除对象而将每个对象加进内存用这种方法不会导致级联操作

Hibernate基础——级联

在默认情况下Hibernate不进行任何级联操作在配置中级联的值可以用逗号分隔如: cascade=alldeleteorphan

◆all : 所有情况下均进行关联操作

◆none 所有情况下均不进行关联操作这是默认值

◆saveupdate: 在执行save/update/saveOrUpdate时进行关联操作

◆delete 在执行delete时进行关联操作

all的意思是saveupdate + delete

还有一种级联类型是deleteorphan 如果使用deleteorphan那么从父对象的集合中删除子对象时就从数据库中删除子对象这种级联类型只适用于一对多关联all级联类型不包含deleteorphan必须使用all deleteorphan

在添加deleteorphan级联类型后只需从父对象的集合中删除子对象Hibernate会自动地从数据库中删除子对象不需要执行其他调用下面的示例是从集合中删除一个子对象:

SuppliergetProducts()remove(product);

Hibernate基础——延迟加载

在使用XML映射时默认启用延迟加载但是在使用注解时默认不启用在Hibernate默认情况下类(包括Set和Map等集合)应该延迟加载如果使用延迟加载一个实体的关联实体只在它们被直接请求时加载

Hibernate只能通过会话访问数据库如果试图访问还没有加载的关联但是实体是分离的那么Hibernate会抛出一个异常:LazyInitializationException

解决方法:

◆让实体再次进入持久状态

◆在实体脱离会话之前访问所需的所有字段

Hibernate基础——查询对象

◆Criteria Query API是一个Java API

◆HQL是一种面向对象的查询语言

Hibernate基础——主键

如果表已经创建了但是没有主键Hibernate就要求指定一个主键但是在使用Hibernate时应该尽可能使用指定了主键的表

Hibernate类型

Hibernate类型分为三大类型:实体组件实体: 是一个使用<class>或<subclass>元素映射到数据库的POJO类也可以用Map表示dynamicmap还可以用DomJ Document对象表示

上一篇:Hibernate单向一对多注意的问题

下一篇:框架Hibernate Validator 简介