827 次浏览
存在三种类型的继承映射策略:基于表层次结构、基于具体类和基于子类。本文将讨论基于表层次结构的策略。基于表层次结构的策略只为继承映射创建一个表。这种方法的缺点是表中会存储大量空值。`@Inheritance(strategy=InheritanceType.SINGLE_TABLE)`、`@DiscriminatorColumn` 和 `@DiscriminatorValue` 是此策略中使用的注解。`@DiscriminatorColumn` 用于创建一个额外的列,用于标识层次结构类。请考虑以下示例以了解这一点:步骤……阅读更多
3K+ 次浏览
在本文中,我们将了解如何在 Hibernate 中执行批量插入/更新。每当我们执行 SQL 语句时,我们都是通过向数据库发出网络调用来实现的。现在,如果我们必须将 10 个条目插入到我们的数据库表中,那么我们必须进行 10 次网络调用。我们可以通过使用批处理来优化我们的网络调用。批处理允许我们在单个网络调用中执行一组 SQL 语句。为了理解和实现这一点,让我们定义我们的实体:`@Entity public class Parent { @Id @GeneratedValue(strategy ... 阅读更多
2K+ 次浏览
大多数时候,当我们使用 JPA 查询时,获得的结果会被映射到一个对象/特定数据类型。但是当我们在查询中使用聚合函数时,处理结果有时需要我们自定义 JPA 查询。让我们通过一个示例(部门、员工)来理解这一点:Dept.java `@Entity public class Dept { @Id private Long id; private String name; @OneToMany(mappedBy = "dep") private List emp; //Getters //Setters }` 一个部门可以拥有一个或多个……阅读更多
9K+ 次浏览
在本文中,我们将了解如何使用像 Hibernate 这样的 ORM(对象关系映射)框架连接到 MySQL 数据库。首先,我们需要在我们的 pom.xml 文件中添加 Hibernate 的 Maven 依赖项:`org.hibernate hibernate-core 5.6.2.Final` 现在,让我们定义一个实体类,它将使用 Hibernate 映射到数据库表:`@Entity @Table( name = " Employee") public class Employee { @Id @GeneratedValue(strategy = GenerationType.AUTO) Long id; @Column(name = ... 阅读更多
缓存有助于减少执行查询的数据库网络调用。一级缓存与会话相关联。它是隐式实现的。一级缓存只存在于会话对象存在期间。一旦会话对象终止/关闭,将不会有缓存对象。二级缓存跨多个会话对象工作。它与会话工厂相关联。二级缓存对象可用于单个会话工厂中的所有会话。当特定会话工厂关闭时,这些缓存对象将被终止。实现二级缓存我们需要添加以下依赖项以便……阅读更多
6K+ 次浏览
Red Hat 开发了 Hibernate 框架,也称为 Hibernate 对象关系映射器 (ORM)。这个用于 Java 编程语言的对象关系映射工具的第一个版本于 2007 年 5 月 23 日提供下载。Hibernate 支持跨多个平台工作的 Java 虚拟机 (JVM),并且它是用 Java 编写的。“JPA”代表 Java 持久性 API。它是一个管理关系数据的工具。在最基本的形式中,JPA 是一个规范。它处理对象元数据或关系元数据。Java 持久性查询语言 (JPQL) 是该语言……阅读更多
Hibernate 或 JPA 支持 4 种不同类型的主键生成器。这些生成器用于在将行插入数据库时生成主键。以下是主键生成器:`GenerationType.AUTO`、`GenerationType.IDENTITY`、`GenerationType.SEQUENCE`、`GenerationType.TABLE`。`GenerationType.IDENTITY` - 在 identity 中,数据库负责自动生成主键。插入一行而不为 ID 指定值,并在插入行后,向数据库请求最后生成的 ID。Oracle 11g 不支持 identity 主键生成器。此功能在 Oracle 12c 中受支持。`GenerationType.SEQUENCE` - 在 sequence 中,我们首先向数据库请求序列的下一组……阅读更多
19K+ 次浏览
Save() 和 persist() 这两种方法都用于将对象保存到数据库中。根据文档:Save() - 持久化给定的瞬态实例,首先分配一个生成的标识符。(或者如果使用分配的生成器,则使用标识符属性的当前值。)如果关联映射为 `cascade="save-update"`,则此操作会级联到关联的实例。根据文档:persist() - 使瞬态实例持久化。如果关联映射为 `cascade="persist"`,则此操作会级联到关联的实例。此方法的语义由 JSR-220 定义。序号关键点save()persist()1基本它将对象存储到数据库中它也将在数据库中存储对象2返回类型它返回生成的 id,返回类型为……阅读更多
23K+ 次浏览
在 Hibernate 中,get() 和 load() 是两种用于为给定标识符获取数据的方法。它们都属于 Hibernate 会话类。如果会话缓存或数据库中不存在给定标识符的行,则 get() 方法返回 null,而 load() 方法则抛出对象未找到异常。序号关键点Get()Load()1基本它用于为给定标识符从数据库中获取数据它也用于为给定标识符从数据库中获取数据2空对象如果给定标识符找不到对象,则它将返回空对象它将抛出对象未找到异常3延迟……阅读更多
Hibernate 支持两种类型的缓存:一级缓存和二级缓存。一级缓存是会话级缓存,它始终与会话级对象关联。这种类型的缓存用于通过缓存对象的状态来最小化数据库交互。也就是说,它不会在事务中的每次修改后都更新数据库,而只在事务结束时更新一次。二级缓存是会话工厂级缓存,它在所有会话中都可用。在运行事务期间,它会在会话工厂级别加载对象…… 阅读更多