目录
hibernate官网地址:http://hibernate.org/
ORM
对象/关系映射
Hibernate ORM使开发人员可以更轻松地编写其数据在应用程序进程中无法使用的应用程序。作为对象/关系映射(ORM)框架,Hibernate关注数据持久性,因为它适用于关系数据库(通过JDBC)。不熟悉ORM的概念?在这里阅读。
JPA提供商
除了其自己的“本机” API,Hibernate还是Java Persistence API(JPA)规范的实现。这样,它可以轻松地在支持JPA的任何环境中使用,包括Java SE应用程序,Java EE应用程序服务器,Enterprise OSGi容器等。
惯用的持久性
Hibernate使您能够遵循自然的面向对象习惯用法(包括继承,多态性,关联,组合和Java集合框架)来开发持久类。Hibernate不需要用于持久类的接口或基类,并使任何类或数据结构都可以持久化。
高性能
Hibernate支持延迟初始化,多种获取策略以及具有自动版本控制和时间戳记的乐观锁定。Hibernate不需要特殊的数据库表或字段,并在系统初始化时而不是在运行时生成大量SQL。
从开发人员的生产力和运行时性能方面来说,Hibernate始终提供优于纯JDBC代码的卓越性能。
可扩展性
Hibernate旨在在应用程序服务器集群中工作并提供高度可扩展的体系结构。Hibernate在任何环境下都可以很好地扩展:使用它来驱动可为数百个用户服务的内部Intranet或为数十万个服务的关键任务应用程序。
可靠的
Hibernate以其出色的稳定性和质量而著称,并被成千上万的Java开发人员所接受和使用证明。
可扩展性
Hibernate具有高度的可配置性和可扩展性。
Search
全文搜索实体
Hibernate Search自动从Hibernate ORM实体中提取数据,以将其推送到本地Apache Lucene索引或远程Elasticsearch索引。
它具有以下特点:
例如,按如下所示映射您的实体:
@Entity
// This entity is mapped to an index
@Indexed
public class Book {
// The entity ID is the document ID
@Id
@GeneratedValue
private Integer id;
// This property is mapped to a document field
@FullTextField
private String title;
@ManyToMany
// Authors will be embedded in Book documents
@IndexedEmbedded
private Set<Author> authors = new HashSet<>();
// Getters and setters
// ...
}
@Entity
public class Author {
@Id
@GeneratedValue
private Integer id;
// This property is mapped to a document field
@FullTextField
private String name;
@ManyToMany(mappedBy = "authors")
private Set<Book> books = new HashSet<>();
// Getters and setters
// ...
}
索引预先存在的数据,如下所示:
SearchSession searchSession = Search.session( entityManager );
MassIndexer indexer = searchSession.massIndexer( Book.class );
indexer.startAndWait();
自动索引不需要对基于JPA或Hibernate ORM的代码进行任何更改:
Author author = new Author();
author.setName( "Isaac Asimov" );
Book book = new Book();
book.setTitle( "The Caves Of Steel" );
book.getAuthors().add( author );
author.getBooks().add( book );
entityManager.persist( author );
entityManager.persist( book );
并像这样搜索:
SearchResult<Book> result = Search.session( entityManager )
.search( Book.class )
.where( f -> f.match()
.fields( "title", "authors.name" )
.matching( "Isaac" ) )
.fetch( 20 );
List<Book> hits = result.hits();
long totalHitCount = result.total().hitCount();
简单而强大
旨在从头开始易于使用。当您专注于搜索的业务方面时,可以透明地处理模式初始化,索引编制和查询语法。
而且,如果您需要超越它,它并不会阻止您: 可以在Search DSL查询的中间插入本机Lucene查询 或Elasticsearch JSON。
本地或分布式
虽然您会发现基于Apache Lucene的“单个框”的性能非常出色,但是您也可以通过分发应用程序并依靠Elasticsearch集群进行索引来进行横向扩展,而只需进行一些配置更改。
空间查询
索引地理定位的实体就像添加@GenericField
注释一样容易 。
集合体
获取按组和类别汇总的搜索结果。
例如,网上商店将要显示所有点击,但还要按价格范围和品牌显示点击数。
Validator
http://hibernate.org/validator/
应用层不可知验证
Hibernate Validator允许表达和验证应用程序约束。默认的元数据源是注释,能够通过使用XML进行覆盖和扩展。它不依赖于特定的应用程序层或编程模型,并且可用于服务器和客户端应用程序编程。但是一个简单的例子说了1000多个字:
public class Car {
@NotNull
private String manufacturer;
@NotNull
@Size(min = 2, max = 14)
private String licensePlate;
@Min(2)
private int seatCount;
// ...
}
可扩展的
Hibernate Validator提供了可配置的Bootstrap API以及一系列内置约束。通过创建自定义约束,可以轻松扩展后者。
丰富的元数据API
Hibernate Validator通过元数据API(例如工具集成)提供对约束配置的访问。
参考实施
Hibernate Validator 6.x是Bean Validation 2.0的参考实现。
OGM
许多NoSQL存储,一个用于访问它们的API
Hibernate OGM为NoSQL解决方案提供Java Persistence(JPA)支持。它重用了Hibernate ORM的引擎,但是将实体持久存储在NoSQL数据存储中,而不是关系数据库中。
我们知道您有问题,我们将在FAQ中回答。
各种各样的后端
丰富的查询功能
Hibernate OGM支持几种搜索实体并将其作为Hibernate托管对象返回的方式:
-
JPQL查询(我们将它们转换为本地后端查询)
-
数据存储特定的本机查询
-
全文查询,使用Hibernate Search作为索引引擎
还有更多...
Tools
Hibernate Tools是用于Hibernate的工具集,实现为Eclipse插件的集成套件 ,以及用于集成到构建周期中的统一Ant任务。Hibernate Tools是JBoss Tools的核心组件, 因此也是JBoss Developer Studio的一部分。
Eclipse中提供以下功能。
映射编辑器
Hibernate XML映射文件的编辑器,支持自动完成和语法突出显示。该编辑器甚至支持对类名,属性/字段名,表名和列名进行语义自动补全。
控制台
Hibernate Console透视图允许您配置数据库连接,提供类及其关系的可视化,并允许您针对数据库以交互方式执行HQL查询并浏览查询结果。
逆向工程
Hibernate Tools最强大的功能是数据库逆向工程工具,可以在几秒钟内生成域模型类和Hibernate映射文件,带注释的EJB3实体bean,HTML文档甚至整个JBoss Seam应用程序!
向导
提供了几个向导,包括用于快速生成Hibernate配置(cfg.xml)文件的向导和Hibernate控制台配置。
Ant任务
Hibernate工具包含一个统一的Ant任务,使您可以在构建过程中运行模式生成,映射生成或Java代码生成。
Reactive
http://hibernate.org/reactive/
反应对象/关系映射
兼容性
Hibernate Reactive要求:
-
Java 8
-
Hibernate ORM 5.4,以及
-
数据库的Vert.x 3.9反应数据库客户端。
它适用于PostgreSQL,MySQL,MariaDB,Db2和CockroachDB。
入门
Others
我们总是有解决数据相关问题的新思路。您可以在这里找到其中的一些实验。
Hibernate 分片
Hibernate Shards尚未与最新的Hibernate ORM版本保持同步。一些社区成员有兴趣使其赶上来。如果您有兴趣,请与我们联系。
您不能总是将所有关系数据放在单个关系数据库中:
-
有时您只是拥有太多数据。
-
有时您具有分布式部署体系结构。
-
有时律师会说“不”(或更可能是“不!”)。
无论出于何种原因,与多个关系数据库进行交谈都不可避免地会使应用程序的开发复杂化。
Hibernate Shards是一个框架,旨在通过向Hibernate Core添加对水平分区的支持来封装并最大程度地减少这种复杂性。
主要特征
标准的Hibernate编程模型
Hibernate Shards允许您继续使用您熟悉和喜爱的Hibernate API:SessionFactory,Session,Criteria,Query。如果您已经知道如何使用Hibernate,那么您已经知道如何使用Hibernate Shards。
灵活的分片策略
您可以根据需要在各个分片上分布数据。使用我们提供的默认策略之一或插入您自己的特定于应用程序的逻辑。
支持虚拟分片
认为您的分片策略永远不会改变吗?再想想。一旦部署了分片感知应用程序,添加新分片并重新分发数据将是您将面临的最棘手的运营挑战之一。Hibernate Sharding支持虚拟分片,该功能旨在简化重新分片数据的过程。
免费/开源
Hibernate Shards已获得LGPL(最小GNU公共许可证)的许可。