Hibernate基础详细分析

开发 后端
这里介绍Hibernate基础,包括Hibernate只能通过会话访问数据库,如果试图访问还没有加载的关联,但是实体是分离的,那么Hibernate会抛出一个异常:LazyInitializationException.

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

1.Hibernate基础——删除实体

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

  1. Public void delete(Object object) throws HibernateException 

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

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

  1. session.creatQuery(“”delete from user”).executeUpdate(); 

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

2.Hibernate基础——级联

在默认情况下,Hibernate不进行任何级联操作.在配置中,级联的值可以用逗号分隔.如: cascade=”all,delete-orphan”.
◆all :  所有情况下均进行关联操作。
◆none: 所有情况下均不进行关联操作。这是默认值。
◆save-update: 在执行save/update/saveOrUpdate时进行关联操作。
◆delete: 在执行delete时进行关联操作。

all的意思是save-update + delete

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

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

  1. Supplier.getProducts().remove(product); 

3.Hibernate基础——延迟加载

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

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

解决方法:
◆让实体再次进入持久状态.
◆在实体脱离会话之前访问所需的所有字段 

4.Hibernate基础——查询对象
◆Criteria Query API是一个Java  API.
◆HQL是一种面向对象的查询语言.

5.Hibernate基础——主键

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

6.Hibernate类型

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

【编辑推荐】

  1. 讲解NHibernate Session
  2. 简单描述Hibernate Sample
  3. Hibernate Annotations维护验证逻辑
  4. Hibernate ClassValidator实例
  5. 描述Hibernate持久性类
责任编辑:佚名 来源: 博客园
相关推荐

2009-09-25 14:23:39

2009-06-18 14:00:51

2009-09-14 16:21:34

LINQ To XML

2009-09-09 09:48:43

Linq延迟加载

2009-10-10 13:52:57

VB Update方法

2009-09-14 13:50:35

LINQ编程模型

2009-11-20 13:11:44

Oracle XML数

2009-09-08 15:56:50

Linq使用Group

2010-01-06 13:50:37

.NET Framew

2009-03-24 08:30:54

AndroidGoogle移动os

2009-09-07 13:19:44

C#线程同步

2009-09-03 17:57:06

C#声明事件

2009-12-16 14:09:14

Visual Stud

2009-12-07 15:37:00

WCF控件

2010-04-26 18:17:19

Oracle存储过程

2009-09-04 15:43:07

C#流模型

2011-09-24 12:34:03

2009-09-07 14:18:01

C#内存管理

2009-09-09 13:53:21

Linq表值函数

2009-12-03 17:41:40

PHP应用发展
点赞
收藏

51CTO技术栈公众号