这段时间刚开始学习Hibernate,到官网下文件包,发现刚出来的hibernate-release-4.0.0.CR6,于是下了下来,对着书上的例子一敲,问题来了...见下图
没办法,又重新进官网下了个hibernate-distribution-3.6.8.Final,发现没有问题。
于是乎......在官网和4.0源文件中穿插研究了几个小时,终于搞明白怎么回事了。
Hibernate4.0新增了一个ServiceRegistry接口,应用于Hibernate的配置或者服务等将统一向这个ServiceRegistry注册后才能生效。所以需要构建一个ServiceRegistry对象,将配置信息向它注册,然后Configuration对象根据从这个ServiceRegistry对象中获取配置信息生成SessionFactory。
那么这个ServiceRegistry怎么来呢?看看源代码结构就能发现它的来源地了——org.hibernate.service.ServiceRegistryBuilder。
分析一下这个ServiceRegistryBuilder的源文件,得出以下新的构建SessionFactory的方式:
Configuration config = new Configuration();
SessionFactory sf = config.buildSessionFactory(
new ServiceRegistryBuilder()
.configure()
.buildServiceRegistry());
却发现仍然有问题,居然是读取hibernate.cfg.xml文件出错,异常如下:
[org.xml.sax.SAXParseException: cvc-elt.1: Cannot find the declaration of element 'hibernate-configuration'.]
该文件经hibernate3测试通过,不可能出错,难道是要用hibernate-configuration-4.0.dtd?打开浏览器输入地址,发现没有这个文件,无奈,不用xml文件配置,使用hibernate.properties进行配置,修改代码如下:
Configuration config = new Configuration();
SessionFactory sf = config.buildSessionFactory(
new ServiceRegistryBuilder()
.buildServiceRegistry());
运行测试通过!
不过,这只是很肤浅的用法,更深入的用法尚在摸索中...
简单得出总结,Hibernate4的配置入口不再是Configuration对象,而是ServiceRegistry对象,Configuration对象将通过ServiceRegistry对象获取配置信息(官方说法是为了方便统一管理)。但是使用XML文件进行配置仍有不知名的问题,盼早日明晓。
以上见解仅仅是自己的一份学习笔记,希望能帮助到一些有同样疑惑的朋友,本人也只是刚开始学习Hibernate,其中肯定有不成熟与草率之处,希望各位看到的朋友多多交流指正,谢谢!
补充:
更正规与专业的用法可参照Hibernate 4.0源代码中Configuration#buildSessionFactory()的实现:
public SessionFactory buildSessionFactory() throws HibernateException {
Environment.verifyProperties( properties );
ConfigurationHelper.resolvePlaceHolders( properties );
final ServiceRegistry serviceRegistry = new ServiceRegistryBuilder()
.applySettings( properties )
.buildServiceRegistry();
setSessionFactoryObserver(
new SessionFactoryObserver() {
@Override
public void sessionFactoryCreated(SessionFactory factory) {
}
@Override
public void sessionFactoryClosed(SessionFactory factory) {
( (StandardServiceRegistryImpl) serviceRegistry ).destroy();
}
}
);
return buildSessionFactory( serviceRegistry );
}
分享到:
相关推荐
### Hibernate 4.0 使用中的常见错误解析与应对策略 #### ServiceRegistry的引入与使用 在Hibernate 4.0版本中,对原有的架构进行了重大的调整,其中最显著的变化之一便是`ServiceRegistry`的引入。这标志着从...
本教程将详细介绍如何在Hibernate 4.0版本中创建一个基础的“HelloWorld”项目,这个项目将会演示如何配置Hibernate、建立数据库连接以及执行基本的数据操作。 首先,我们需要设置项目的基础结构。由于项目依赖于...
在Java的持久化框架Hibernate中,一对一(One-to-One)关联是对象关系映射(ORM)中的一个重要概念,它用于表示两个实体之间一对一的映射关系。本篇将深入探讨Hibernate 3.2中的一对一关系,以及如何在实际项目中...
总结起来,Hibernate ORM 4.0及更高版本中的Service Registry是一个重要的新特性,它提供了更高效的服务管理和访问方式,增强了系统的可扩展性和灵活性。开发者在升级到新版本时,应适应这一变化,以便更好地利用...
Hibernate作为Java领域中的一个强大ORM(对象关系映射)框架,为开发者提供了在Java应用程序中操作数据库的强大工具。它允许我们将数据库操作转换为对Java对象的操作,大大简化了开发流程。而Hibernate Annotations...
Hibernate,作为Java领域中最著名的对象关系映射(ORM)框架之一,极大地简化了数据库操作,使得开发者能够以面向对象的方式处理数据。本文将重点探讨`hibernate-core-5.0.11.Final.jar`的核心源码,帮助读者深入...
传统上,Hibernate 的配置依赖于外部 XML 文件,而最近发布的几个 Hibernate 版本中,出现了一种基于 Java 5 注释的更为巧妙的新方法,即 Hibernate Annotation 库。借助新的 Hibernate Annotation 库,即可一次性地...
3. Hibernate 5.2.2.Final新特性: - 改进了查询API,支持JPA 2.2规范。 - 提供了更强大的HQL(Hibernate Query Language)和Criteria API,支持复杂查询。 - 性能优化,包括更快的初始化时间和更好的内存管理。 ...
在Hibernate中,对象有三种状态:瞬时态、持久态和脱管态。理解这些状态对于正确操作对象至关重要,例如,只有持久态对象才能参与事务。 六、缓存机制 Hibernate 3.2引入了二级缓存,通过CacheProvider实现,如...
Hibernate,作为Java领域中的一个著名ORM(对象关系映射)框架,它极大地简化了数据库操作,使得开发者能够以面向对象的方式来处理数据库交互。这次我们关注的是Hibernate 4.3.9.Final版本,它包含了“required”...
借助新的 Hibernate Annotation 库,即可一次性地分配所有旧映射文件——一切都会按照您的想法来定义——注释直接嵌入到您的 Java 类中,并提供一种强大及灵活的方法来声明持久性映射。 使用 Hibernate 注解的优点...
如果是注解方式,实体类中的属性会自动映射到表的列。 4. **SessionFactory创建**: 在代码中使用`Configuration`对象读取`hibernate.cfg.xml`配置,然后创建SessionFactory。 ```java Configuration cfg = new ...
1. **创建新项目**:在IDEA中创建一个新的Java Web项目。 2. **配置项目**:在配置项目过程中,需要选择Hibernate相关的依赖。IDEA提供了三种方式: - 使用本地的Hibernate JAR包。 - 使用IDEA内置的JAR包(注意...
3. 查询语言:支持HQL(Hibernate Query Language)和Criteria API,提供面向对象的查询方式。 4. 类型系统:处理Java类型与数据库类型的转换,确保数据的正确存储和检索。 5. 缓存机制:包括一级缓存(Session级别...
- **自动对象关系映射**:通过配置文件(通常是 XML 文件),Hibernate 能够自动将 Java 对象持久化到数据库中,并能从数据库中加载对象。 **2. Hibernate 架构** - **PO (Persistent Objects 持久化对象)**:这些...
Hibernate 是一个开源的对象关系映射(ORM)框架,它为开发者提供了一种将 Java 应用程序中的对象映射到数据库表的方式。通过 Hibernate,开发人员可以使用面向对象的方法来处理数据库操作,而无需直接编写 SQL 语句...
### MyEclipse中Hibernate的基本配置步骤与理解 #### 一、引言 随着软件开发行业的不断发展,ORM(Object-Relational Mapping,对象关系映射)技术已成为连接对象模型与关系型数据库的重要桥梁之一。其中,...
Hibernate是一个强大的Java持久化框架,它为开发人员提供了一种简单、高效的方式来管理数据库操作。在Java应用程序中,Hibernate作为对象关系映射(ORM)工具,使得开发者可以通过处理Java对象来间接操作数据库,...
在本文中,我们将深入探讨Hibernate 4.2.1版本的主要特点、功能改进以及如何在Eclipse环境中集成和使用。 **1. Hibernate ORM框架概述** Hibernate是一个开源的Java库,它简化了Java应用程序与关系数据库之间的交互...