fix fonts and formatting of tables in pdf

This commit is contained in:
Gavin 2023-05-16 12:53:21 +02:00 committed by Christian Beikov
parent 24dd953569
commit 0cb64f6f42
6 changed files with 136 additions and 97 deletions

View File

@ -6,7 +6,7 @@ Unfortunately, there are several distinct ways to configure and bootstrap Hibern
The four basic ways to obtain an instance of Hibernate are shown in the following table: The four basic ways to obtain an instance of Hibernate are shown in the following table:
[cols="1,1"] [cols="50,50"]
|=== |===
| Using the standard JPA-defined XML, and the operation `Persistence.createEntityManagerFactory()` | Using the standard JPA-defined XML, and the operation `Persistence.createEntityManagerFactory()`
@ -57,6 +57,7 @@ You'll also need to add a dependency for the JDBC
driver for your database. driver for your database.
.JDBC driver dependencies .JDBC driver dependencies
[cols="40,~"]
|=== |===
| Database | Driver dependency | Database | Driver dependency
@ -87,6 +88,7 @@ Where `{version}` is the latest version of the JDBC driver for your databse.
Optionally, you might also add any of the following additional features: Optionally, you might also add any of the following additional features:
.Optional dependencies .Optional dependencies
[cols="40,~"]
|=== |===
| Optional feature | Dependencies | Optional feature | Dependencies
@ -236,7 +238,7 @@ With rare exception, the default behavior of every one of these settings was car
The properties you really do need to get started are these three: The properties you really do need to get started are these three:
.JDBC connection settings .JDBC connection settings
[cols=",2"] [cols="35,~"]
|=== |===
| Configuration property name | Purpose | Configuration property name | Purpose
@ -258,7 +260,7 @@ Pooling JDBC connections is an extremely important performance optimization.
You can set the size of Hibernate's built-in connection pool using this property: You can set the size of Hibernate's built-in connection pool using this property:
.Built-in connection pool size .Built-in connection pool size
[cols=",2"] [cols="35,~"]
|=== |===
| Configuration property name | Purpose | Configuration property name | Purpose
@ -275,7 +277,7 @@ This pool is not meant for use in production, and later, when we discuss perform
Alternatively, in a container environment, you'll need at least one of these properties: Alternatively, in a container environment, you'll need at least one of these properties:
.Transaction management settings .Transaction management settings
[cols=",2"] [cols="35,~"]
|=== |===
| Configuration property name | Purpose | Configuration property name | Purpose
@ -297,18 +299,18 @@ initialization time by specifying one or more of the following configuration
properties: properties:
.Schema management settings .Schema management settings
[cols=",2"] [cols="52,~"]
|=== |===
| Configuration property name | Purpose | Configuration property name | Purpose
| `jakarta.persistence.schema-generation.database.action` | `jakarta.persistence.schema-generation.database.action`
a| * If `drop-and-create`, first drop the schema and then export tables, sequences, and constraints. a| * If `drop-and-create`, first drop the schema and then export tables, sequences, and constraints
* If `create`, export tables, sequences, and constraints, without attempting to drop them first. * If `create`, export tables, sequences, and constraints, without attempting to drop them first
* If `create-drop`, drop the schema and recreate it on `SessionFactory` startup. * If `create-drop`, drop the schema and recreate it on `SessionFactory` startup
Additionally, drop the schema on `SessionFactory` shutdown. Additionally, drop the schema on `SessionFactory` shutdown
* If `drop`, drop the schema on `SessionFactory` shutdown. * If `drop`, drop the schema on `SessionFactory` shutdown
* If `validate`, validate the database schema without changing it. * If `validate`, validate the database schema without changing it
* If `update`, only export what's missing in the schema. * If `update`, only export what's missing in the schema
| `jakarta.persistence.create-database-schemas` | `jakarta.persistence.create-database-schemas`
| (Optional) If `true`, automatically create schemas and catalogs | (Optional) If `true`, automatically create schemas and catalogs
@ -333,7 +335,7 @@ This approach is cleaner than writing Java code to instantiate entity instances
[TIP] [TIP]
// .Programmatic schema export // .Programmatic schema export
==== ====
The `SchemaManager` API allow you to control schema export programmatically. Alternatively, the `SchemaManager` API allow you to control schema export programmatically.
[source,java] [source,java]
sessionFactory.getSchemaManager().exportMappedObjects(true); sessionFactory.getSchemaManager().exportMappedObjects(true);
@ -360,7 +362,7 @@ logger.hibernate.level = debug
You can make the SQL logged to the console more readable by enabling formatting or highlighting. You can make the SQL logged to the console more readable by enabling formatting or highlighting.
.Settings for SQL logging to the console .Settings for SQL logging to the console
[cols=",2"] [cols="35,~"]
|=== |===
| Configuration property name | Purpose | Configuration property name | Purpose
@ -376,7 +378,7 @@ These settings can really help when troubleshooting SQL.
The following properties are very useful for minimizing the amount of information you'll need to explicitly specify in `@Table` and `@Column` annotations, which we'll discuss below in <<object-relational-mapping>>: The following properties are very useful for minimizing the amount of information you'll need to explicitly specify in `@Table` and `@Column` annotations, which we'll discuss below in <<object-relational-mapping>>:
.Settings for minimizing explicit mapping information .Settings for minimizing explicit mapping information
[cols=",2"] [cols="35,~"]
|=== |===
| Configuration property name | Purpose | Configuration property name | Purpose
@ -402,7 +404,7 @@ Please refer to the Javadoc for these interfaces for more information about the
_By default,_ SQL Server's `char` and `varchar` types don't accommodate Unicode data. But a Java string may contain any Unicode character. So, if you're working with SQL Server, you might need to force Hibernate to use the `nchar` and `nvarchar` column types. _By default,_ SQL Server's `char` and `varchar` types don't accommodate Unicode data. But a Java string may contain any Unicode character. So, if you're working with SQL Server, you might need to force Hibernate to use the `nchar` and `nvarchar` column types.
.Setting the use of nationalized character data .Setting the use of nationalized character data
[cols=",2"] [cols="40,~"]
|=== |===
| Configuration property name | Purpose | Configuration property name | Purpose

View File

@ -209,7 +209,7 @@ On the other hand, if, as is more common, you're working with a pre-existing dat
JPA defines the following strategies for generating ids, which are enumerated by `GenerationType`: JPA defines the following strategies for generating ids, which are enumerated by `GenerationType`:
.Standard id generation strategies .Standard id generation strategies
[cols="3,2,6"] [cols="25,15,~"]
|=== |===
| Strategy | Java type | Implementation | Strategy | Java type | Implementation
@ -508,7 +508,7 @@ A _basic_ attribute of an entity is a field or property which maps to a single c
The JPA specification defines a quite limited set of basic types: The JPA specification defines a quite limited set of basic types:
.JPA-standard basic attribute types .JPA-standard basic attribute types
[cols="3,2,6"] [cols="30,^14,~"]
|==== |====
| Classification | Package | Types | Classification | Package | Types
@ -541,13 +541,14 @@ As we'll soon see in <<embeddable-objects>>, Hibernate has much better ways to h
Hibernate slightly extends this list with the following types: Hibernate slightly extends this list with the following types:
.Additional basic attribute types in Hibernate .Additional basic attribute types in Hibernate
[cols="3,2,6"] [cols="30,^14,56"]
|==== |====
| Classification | Package | Types | Classification | Package | Types
| Date/time types | `java.time` | `Duration`, `ZoneId`, `ZoneOffset`, `ZonedDateTime`, `Year` | Additional date/time types | `java.time` | `Duration`, `ZoneId`, `ZoneOffset`, `Year`, and even `ZonedDateTime`
| LOB types | `java.sql` | `Blob`, `Clob` | JDBC LOB types | `java.sql` | `Blob`, `Clob`
| Miscellaneous | `java.util` | `Currency`, `URL` | Java class object | `java.lang` | `Class`
| Miscellaneous types | `java.util` | `Currency`, `URL`, `TimeZone`
|==== |====
The `@Basic` annotation explicitly specifies that an attribute is basic, but it's often not needed, since attributes are assumed basic by default. The `@Basic` annotation explicitly specifies that an attribute is basic, but it's often not needed, since attributes are assumed basic by default.
@ -917,11 +918,11 @@ There are three annotations for mapping associations: `@ManyToOne`, `@OneToMany`
They share some common annotation members: They share some common annotation members:
.Association-defining annotation members .Association-defining annotation members
[cols=",4,3"] [cols="14,~,35"]
|=== |===
| Member | Interpretation | Default value | Member | Interpretation | Default value
| `cascade` | Persistence operations which should <<cascade,cascade>> to the associated entity (a list of ``CascadeType``s) | `{}` | `cascade` | Persistence operations which should <<cascade,cascade>> to the associated entity; a list of ``CascadeType``s | `{}`
| `fetch` | Whether the association is eagerly <<association-fetching,fetched>> or may be <<proxies-and-lazy-fetching,proxied>> | `fetch` | Whether the association is eagerly <<association-fetching,fetched>> or may be <<proxies-and-lazy-fetching,proxied>>
a| a|
- `LAZY` for `@OneToMany` and `@ManyToMany` - `LAZY` for `@OneToMany` and `@ManyToMany`
@ -1204,13 +1205,18 @@ That is, the collection is a _bag_, not a set.
We've now seen the following kinds of entity attribute: We've now seen the following kinds of entity attribute:
[cols="32,^15,^15,~"]
|=== |===
| Kind of entity attribute | Kind of referenced value | Multiplicity | Examples | Kind of entity attribute | Kind of reference | Multiplicity | Examples
| Single-valued attribute of basic type | Non-entity | At most one | `@Basic String name` | Single-valued attribute of basic type | Non-entity | At most one | `@Basic String name`
| Single-valued attribute of embeddable type | Non-entity | At most one | `@Embedded Name name` | Single-valued attribute of embeddable type | Non-entity | At most one | `@Embedded Name name`
| Single-valued association | Entity | At most one | `@ManyToOne Publisher publisher`, `@OneToOne Person person` | Single-valued association | Entity | At most one |
| Many-valued association | Entity | Zero or more | `@OneToMany Set<Book> books`, `@ManyToMany Set<Author> authors` `@ManyToOne Publisher publisher` +
`@OneToOne Person person`
| Many-valued association | Entity | Zero or more |
`@OneToMany Set<Book> books` +
`@ManyToMany Set<Author> authors`
|=== |===
Scanning this taxonomy, you might ask: does Hibernate have multivalued attributes of basic or embeddable type? Scanning this taxonomy, you might ask: does Hibernate have multivalued attributes of basic or embeddable type?
@ -1229,11 +1235,16 @@ And the answer again is that _it does_. Indeed, there are two different ways to
So we may expand our taxonomy with: So we may expand our taxonomy with:
[cols="32,^15,^15,~"]
|=== |===
| Kind of entity attribute | Kind of referenced value | Multiplicity | Examples | Kind of entity attribute | Kind of reference | Multiplicity | Examples
| `byte[]` and `char[]` arrays | Non-entity | Zero or more | `byte[] image`, `char[] text` | `byte[]` and `char[]` arrays | Non-entity | Zero or more |
| Collection of basic-typed elements | Non-entity | Zero or more | `@Array String[] names`, `@ElementCollection Set<String> names` `byte[] image` +
`char[] text`
| Collection of basic-typed elements | Non-entity | Zero or more |
`@Array String[] names` +
`@ElementCollection Set<String> names`
| Collection of embeddable elements | Non-entity | Zero or more | `@ElementCollection Set<Name> names` | Collection of embeddable elements | Non-entity | Zero or more | `@ElementCollection Set<Name> names`
|=== |===
@ -1362,7 +1373,7 @@ There's much more we could say about "element collections", but we won't say it,
Let's pause to remember the annotations we've met so far. Let's pause to remember the annotations we've met so far.
.Declaring entities and embeddable types .Declaring entities and embeddable types
[cols="2,4,1"] [cols="22,~,^13"]
|=== |===
| Annotation | Purpose | JPA-standard | Annotation | Purpose | JPA-standard
@ -1373,7 +1384,7 @@ Let's pause to remember the annotations we've met so far.
|=== |===
.Declaring basic attributes .Declaring basic attributes
[cols="2,4,2,1"] [cols="22,~,^10,^13"]
|=== |===
| Annotation | Purpose | Required | JPA-standard | Annotation | Purpose | Required | JPA-standard
@ -1388,7 +1399,7 @@ Let's pause to remember the annotations we've met so far.
|=== |===
.Converters and compositional basic types .Converters and compositional basic types
[cols="2,4,1"] [cols="22,~,^13"]
|=== |===
| Annotation | Purpose | JPA-standard | Annotation | Purpose | JPA-standard
@ -1402,7 +1413,7 @@ Let's pause to remember the annotations we've met so far.
|=== |===
.System-generated identifiers .System-generated identifiers
[cols="2,4,1"] [cols="22,~,^13"]
|=== |===
| Annotation | Purpose | JPA-standard | Annotation | Purpose | JPA-standard
@ -1414,7 +1425,7 @@ Let's pause to remember the annotations we've met so far.
|=== |===
.Declaring entity associations .Declaring entity associations
[cols="2,4,1"] [cols="22,~,^13"]
|=== |===
| Annotation | Purpose | JPA-standard | Annotation | Purpose | JPA-standard

View File

@ -200,7 +200,7 @@ Of course, the main reason we need an `EntityManager` is to do stuff to the data
The following important operations let us interact with the persistence context and schedule modifications to the data: The following important operations let us interact with the persistence context and schedule modifications to the data:
.Methods for modifying data and managing the persistence context .Methods for modifying data and managing the persistence context
[cols="2,5"] [cols="30,~"]
|=== |===
| Method name and parameters | Effect | Method name and parameters | Effect
@ -227,7 +227,7 @@ Modifications are automatically detected when the session is <<flush,flushed>>.
On the other hand, the following operations all result in immediate access to the database: On the other hand, the following operations all result in immediate access to the database:
.Methods for reading and locking data .Methods for reading and locking data
[cols="2,5"] [cols="30,~"]
|=== |===
| Method name and parameters | Effect | Method name and parameters | Effect
@ -358,7 +358,7 @@ s.setHibernateFlushMode(FlushMode.MANUAL);
Since flushing is a somewhat expensive operation (the session must dirty-check every entity in the persistence context), setting the flush mode to `COMMIT` can occasionally be a useful optimization. Since flushing is a somewhat expensive operation (the session must dirty-check every entity in the persistence context), setting the flush mode to `COMMIT` can occasionally be a useful optimization.
.Flush modes .Flush modes
[cols=",,3"] [cols="15,15,~"]
|=== |===
| Hibernate `FlushMode` | JPA `FlushModeType` | Interpretation | Hibernate `FlushMode` | JPA `FlushModeType` | Interpretation
@ -397,7 +397,7 @@ Fortunately, HQL is already described in exhaustive (and exhausting) detail in t
// The query language is discussed in great detail below in <<query-language>>. // The query language is discussed in great detail below in <<query-language>>.
Here we want to see how to execute a query via the `Session` or `EntityManager` API. Here we want to see how to execute a query via the `Session` or `EntityManager` API.
The method we call depends on what kind of query it is: The method we call depends on what Kind it is:
- _selection queries_ return a result list, but do not modify the data, but - _selection queries_ return a result list, but do not modify the data, but
- _mutation queries_ modify data, and return the number of modified rows. - _mutation queries_ modify data, and return the number of modified rows.
@ -405,11 +405,12 @@ The method we call depends on what kind of query it is:
Selection queries usually start with the keyword `select` or `from`, whereas mutation queries begin with the keyword `insert`, `update`, or `delete`. Selection queries usually start with the keyword `select` or `from`, whereas mutation queries begin with the keyword `insert`, `update`, or `delete`.
.Executing HQL .Executing HQL
[cols="10,36,32,22"]
|=== |===
| Kind of query | `Session` method | `EntityManager` method | `Query` execution method | Kind | `Session` method | `EntityManager` method | `Query` execution method
| Selection query | `createSelectionQuery(String,Class)` | `createQuery(String,Class)` | `getResultList()`, `getSingleResult()`, or `getSingleResultOrNull()` | Selection | `createSelectionQuery(String,Class)` | `createQuery(String,Class)` | `getResultList()`, `getSingleResult()`, or `getSingleResultOrNull()`
| Mutation query | `createMutationQuery(String)` | `createQuery(String)` | `executeUpdate()` | Mutation | `createMutationQuery(String)` | `createQuery(String)` | `executeUpdate()`
|=== |===
So for the `Session` API we would write: So for the `Session` API we would write:
@ -432,7 +433,7 @@ List<Book> matchingBooks =
.getResultList(); .getResultList();
---- ----
The only difference between `createSelectionQuery()` and `createQuery()` is that `createSelectionQuery()` throw an exception if passed a mutation query. The only difference between `createSelectionQuery()` and `createQuery()` is that `createSelectionQuery()` throw an exception if passed a Mutation.
In the query above, `:titleSearchPattern` is called a _named parameter_. In the query above, `:titleSearchPattern` is called a _named parameter_.
We may also identify parameters by a number. We may also identify parameters by a number.
@ -584,11 +585,12 @@ If you change the default behavior, and set the property to `INLINE` instead of
Execution of a criteria query works almost exactly like execution of HQL. Execution of a criteria query works almost exactly like execution of HQL.
.Executing criteria queries .Executing criteria queries
[cols="10,36,32,22"]
|=== |===
| Kind of query | `Session` method | `EntityManager` method | `Query` execution method | Kind | `Session` method | `EntityManager` method | `Query` execution method
| Selection query | `createSelectionQuery(CriteriaQuery)` | `createQuery(CriteriaQuery)` | `getResultList()`, `getSingleResult()`, or `getSingleResultOrNull()` | Selection | `createSelectionQuery(CriteriaQuery)` | `createQuery(CriteriaQuery)` | `getResultList()`, `getSingleResult()`, or `getSingleResultOrNull()`
| Mutation query | `createMutationQuery(CriteriaUpdate)` or `createQuery(CriteriaDelete)` | `createQuery(CriteriaUpdate)` or `createQuery(CriteriaDelte)` | `executeUpdate()` | Mutation | `createMutationQuery(CriteriaUpdate)` or `createQuery(CriteriaDelete)` | `createQuery(CriteriaUpdate)` or `createQuery(CriteriaDelte)` | `executeUpdate()`
|=== |===
For example: For example:
@ -610,11 +612,12 @@ But ultimately, the true value of ORM is not in avoiding SQL, but in alleviating
As we said <<introduction,right up front>>, Hibernate's generated SQL is meant to be used in conjunction with handwritten SQL, and native SQL queries are one of the facilities we provide to make that easy. As we said <<introduction,right up front>>, Hibernate's generated SQL is meant to be used in conjunction with handwritten SQL, and native SQL queries are one of the facilities we provide to make that easy.
.Executing SQL .Executing SQL
[cols="10,36,32,22"]
|=== |===
| Kind of query | `Session` method | `EntityManager` method | `Query` execution method | Kind | `Session` method | `EntityManager` method | `Query` execution method
| Selection query | `createNativeQuery(String,Class)` | `createNativeQuery(String,Class)` | `getResultList()`, `getSingleResult()`, or `getSingleResultOrNull()` | Selection | `createNativeQuery(String,Class)` | `createNativeQuery(String,Class)` | `getResultList()`, `getSingleResult()`, or `getSingleResultOrNull()`
| Mutation query | `createNativeMutationQuery(String)` | `createNativeQuery(String)` | `executeUpdate()` | Mutation | `createNativeMutationQuery(String)` | `createNativeQuery(String)` | `executeUpdate()`
| Stored procedure | `createStoredProcedureCall(String)` | `createStoredProcedureQuery(String)` | `execute()` | Stored procedure | `createStoredProcedureCall(String)` | `createStoredProcedureQuery(String)` | `execute()`
|=== |===
@ -727,11 +730,12 @@ We have to make sure that the class with the `@NamedQuery` annotation will be sc
The `@NamedNativeQuery` lets us do the same for native SQL queries. The `@NamedNativeQuery` lets us do the same for native SQL queries.
.Executing named queries .Executing named queries
[cols="10,36,32,22"]
|=== |===
| Kind of query | `Session` method | `EntityManager` method | `Query` execution method | Kind | `Session` method | `EntityManager` method | `Query` execution method
| Selection query | `createNamedSelectionQuery(String,Class)` | `createNamedQuery(String,Class)` | `getResultList()`, `getSingleResult()`, or `getSingleResultOrNull()` | Selection | `createNamedSelectionQuery(String,Class)` | `createNamedQuery(String,Class)` | `getResultList()`, `getSingleResult()`, or `getSingleResultOrNull()`
| Mutation query | `createNamedMutationQuery(String)` | `createNamedQuery(String)` | `executeUpdate()` | Mutation | `createNamedMutationQuery(String)` | `createNamedQuery(String)` | `executeUpdate()`
|=== |===
We execute our named query as follows: We execute our named query as follows:

View File

@ -174,7 +174,7 @@ is a bad idea, since it's impossible to create a foreign key constraint that tar
The following annotations specify exactly how elements of the domain model map to tables of the relational model: The following annotations specify exactly how elements of the domain model map to tables of the relational model:
.Annotations for mapping tables .Annotations for mapping tables
[cols=",5"] [%autowidth.stretch]
|=== |===
| Annotation | Purpose | Annotation | Purpose
@ -211,7 +211,7 @@ class Book { ... }
The `@Table` annotation can do more than just specify a name: The `@Table` annotation can do more than just specify a name:
.`@Table` annotation members .`@Table` annotation members
[cols=",8"] [%autowidth.stretch]
|=== |===
| Annotation member | Purpose | Annotation member | Purpose
@ -237,7 +237,7 @@ Instead:
The `@SecondaryTable` annotation is even more interesting: The `@SecondaryTable` annotation is even more interesting:
.`@SecondaryTable` annotation members .`@SecondaryTable` annotation members
[cols=",8"] [%autowidth.stretch]
|=== |===
| Annotation member | Purpose | Annotation member | Purpose
@ -299,7 +299,7 @@ class Author {
Here, there should be a `UNIQUE` constraint on _both_ columns of the association table. Here, there should be a `UNIQUE` constraint on _both_ columns of the association table.
.`@JoinTable` annotation members .`@JoinTable` annotation members
[cols=",8"] [%autowidth.stretch]
|=== |===
| Annotation member | Purpose | Annotation member | Purpose
@ -322,7 +322,7 @@ To better understand these annotations, we must first discuss column mappings in
These annotations specify how elements of the domain model map to columns of tables in the relational model: These annotations specify how elements of the domain model map to columns of tables in the relational model:
.Annotations for mapping columns .Annotations for mapping columns
[cols=",5"] [%autowidth.stretch]
|=== |===
| Annotation | Purpose | Annotation | Purpose
@ -341,7 +341,7 @@ We use the `@Column` annotation to map basic attributes.
The `@Column` annotation is not only useful for specifying the column name. The `@Column` annotation is not only useful for specifying the column name.
.`@Column` annotation members .`@Column` annotation members
[cols=",8"] [%autowidth.stretch]
|=== |===
| Annotation member | Purpose | Annotation member | Purpose
@ -395,7 +395,7 @@ We don't use `@Column` to map associations.
The `@JoinColumn` annotation is used to customize a foreign key column. The `@JoinColumn` annotation is used to customize a foreign key column.
.`@JoinColumn` annotation members .`@JoinColumn` annotation members
[cols=",8"] [%autowidth.stretch]
|=== |===
| Annotation member | Purpose | Annotation member | Purpose
@ -508,7 +508,7 @@ The `@PrimaryKeyJoinColumn` is a special-purpose annotation for mapping:
- the primary key column of the primary table mapped by a subclass in a `JOINED` inheritance hierarchy—which is also a foreign key referencing the primary table mapped by the root entity. - the primary key column of the primary table mapped by a subclass in a `JOINED` inheritance hierarchy—which is also a foreign key referencing the primary table mapped by the root entity.
.`@PrimaryKeyJoinColumn` annotation members .`@PrimaryKeyJoinColumn` annotation members
[cols=",8"] [%autowidth.stretch]
|=== |===
| Annotation member | Purpose | Annotation member | Purpose
@ -559,7 +559,7 @@ So we don't usually need to explicitly specify that a column should be of type `
The constant values defined in the class `org.hibernate.Length` are very helpful here: The constant values defined in the class `org.hibernate.Length` are very helpful here:
.Predefined column lengths .Predefined column lengths
[cols=",,8"] [%autowidth.stretch]
|=== |===
| Constant | Value | Description | Constant | Value | Description
@ -738,7 +738,7 @@ So, as we've seen, there are quite a few annotations that affect the mapping of
Here we summarize the ones we've just seen in the second half of this chapter, along with some we already mentioned in earlier chapters. Here we summarize the ones we've just seen in the second half of this chapter, along with some we already mentioned in earlier chapters.
.Annotations for mapping SQL column types .Annotations for mapping SQL column types
[cols=",3"] [%autowidth.stretch]
|=== |===
| Annotation | Interpretation | Annotation | Interpretation
@ -754,7 +754,7 @@ Here we summarize the ones we've just seen in the second half of this chapter, a
In addition, there are some configuration properties which have a _global_ affect on how basic types map to SQL column types: In addition, there are some configuration properties which have a _global_ affect on how basic types map to SQL column types:
.Type mapping settings .Type mapping settings
[cols=",2"] [%autowidth.stretch]
|=== |===
| Configuration property name | Purpose | Configuration property name | Purpose
@ -781,7 +781,7 @@ Hibernate lets us map an attribute of an entity to a SQL formula involving colum
Thus, the attribute is a sort of "derived" value. Thus, the attribute is a sort of "derived" value.
.Annotations for mapping formulas .Annotations for mapping formulas
[cols=",5"] [%autowidth.stretch]
|=== |===
| Annotation | Purpose | Annotation | Purpose

View File

@ -49,7 +49,7 @@ hibernate.agroal.reapTimeout PT10s
As long as you set at least one property with the prefix `hibernate.agroal`, the `AgroalConnectionProvider` will be selected automatically. As long as you set at least one property with the prefix `hibernate.agroal`, the `AgroalConnectionProvider` will be selected automatically.
.Settings for configuring Agroal .Settings for configuring Agroal
[cols=",4"] [cols="37,~"]
|=== |===
| Configuration property name | Purpose | Configuration property name | Purpose
@ -82,7 +82,7 @@ Batching only helps in cases where a program executes many inserts, updates, or
All you need to do is set a single property: All you need to do is set a single property:
.Enabling JDBC batching .Enabling JDBC batching
[cols=",3"] [%autowidth.stretch]
|=== |===
| Configuration property name | Purpose | Configuration property name | Purpose
@ -236,7 +236,7 @@ It is an error to place it on a subclass entity.
The `@Cache` annotation always specifies a `CacheConcurrencyStrategy`, a policy governing access to the second-level cache by concurrent transactions. The `@Cache` annotation always specifies a `CacheConcurrencyStrategy`, a policy governing access to the second-level cache by concurrent transactions.
.Cache concurrency .Cache concurrency
[cols=",2,3"] [cols="20,30,~"]
|=== |===
| Concurrency policy | Interpretation | Explanation | Concurrency policy | Interpretation | Explanation
@ -327,6 +327,7 @@ But in case it helps, we often test Hibernate with the following configuration,
:ehcache-config: https://www.ehcache.org/documentation/ :ehcache-config: https://www.ehcache.org/documentation/
.EHCache provider configuration .EHCache provider configuration
[cols="35,~"]
|=== |===
| Configuration property name | Property value | Configuration property name | Property value
@ -345,16 +346,18 @@ Alternatively, to use Infinispan as the cache implementation, the following sett
:infinispan-hibernate: https://infinispan.org/docs/stable/titles/hibernate/hibernate.html :infinispan-hibernate: https://infinispan.org/docs/stable/titles/hibernate/hibernate.html
.Infinispan provider configuration .Infinispan provider configuration
[cols=",3"] [cols="35,~"]
|=== |===
| Configuration property name | Property value | Configuration property name | Property value
| `hibernate.cache.region.factory_class` | `infinispan` | `hibernate.cache.region.factory_class` | `infinispan`
| `hibernate.cache.infinispan.cfg` a| | `hibernate.cache.infinispan.cfg` a| Path to infinispan configuration file, for example:
[cols="1,2"] [cols="~,35"]
!=== !===
! `org/infinispan/hibernate/cache/commons/builder/infinispan-configs.xml` ! for a distributed cache ! `org/infinispan/hibernate/cache/commons/builder/infinispan-configs.xml`
! `org/infinispan/hibernate/cache/commons/builder/infinispan-configs-local.xml` ! to test with local cache ! for a distributed cache
! `org/infinispan/hibernate/cache/commons/builder/infinispan-configs-local.xml`
! to test with local cache
!=== !===
|=== |===
@ -363,10 +366,12 @@ You'll find more information about using Infinispan with Hibernate {infinispan-h
Finally, there's a way to globally disable the second-level cache: Finally, there's a way to globally disable the second-level cache:
.Setting to disable caching
[cols="35,~"]
|=== |===
| Configuration property name | Property value | Configuration property name | Property value
| `hibernate.cache.use_second_level_cache` | `true` to enable caching, `false` to disable it | `hibernate.cache.use_second_level_cache` | `true` to enable caching, or `false` to disable it
|=== |===
When `hibernate.cache.region.factory_class` is set, this property defaults to `true`. When `hibernate.cache.region.factory_class` is set, this property defaults to `true`.
@ -376,7 +381,6 @@ When `hibernate.cache.region.factory_class` is set, this property defaults to `t
This setting lets us easily disable the second-level cache completely when troubleshooting or profiling performance. This setting lets us easily disable the second-level cache completely when troubleshooting or profiling performance.
==== ====
You can find much more information about the second-level cache in the {second-level-cache}[User Guide]. You can find much more information about the second-level cache in the {second-level-cache}[User Guide].
[[query-cache]] [[query-cache]]
@ -387,7 +391,8 @@ Hibernate also has a way to cache the result sets of queries, though this is onl
The query cache must be enabled explicitly: The query cache must be enabled explicitly:
.Query cache configuration .Setting to enable the query cache
[cols="35,~"]
|=== |===
| Configuration property name | Property value | Configuration property name | Property value
@ -456,7 +461,7 @@ em.setCacheStoreMode(CacheStoreMode.BYPASS);
The JPA-defined cache modes are: The JPA-defined cache modes are:
.JPA-defined cache modes .JPA-defined cache modes
[cols=",3"] [cols="30,~"]
|=== |===
| Mode | Interpretation | Mode | Interpretation
@ -471,9 +476,9 @@ The JPA-defined cache modes are:
A Hibernate `CacheMode` packages a `CacheRetrieveMode` with a `CacheStoreMode`. A Hibernate `CacheMode` packages a `CacheRetrieveMode` with a `CacheStoreMode`.
.Hibernate cache modes and JPA equivalents .Hibernate cache modes and JPA equivalents
[cols=",5"] [cols="30,~"]
|=== |===
| `CacheMode` | Equivalent JPA modes | Hibernate `CacheMode` | Equivalent JPA modes
| `NORMAL` | `CacheRetrieveMode.USE`, `CacheStoreMode.USE` | `NORMAL` | `CacheRetrieveMode.USE`, `CacheStoreMode.USE`
| `IGNORE` | `CacheRetrieveMode.BYPASS`, `CacheStoreMode.BYPASS` | `IGNORE` | `CacheRetrieveMode.BYPASS`, `CacheStoreMode.BYPASS`
@ -584,7 +589,7 @@ A stateless session:
For a stateless session, you're always working with detached objects. Thus, the programming model is a bit different: For a stateless session, you're always working with detached objects. Thus, the programming model is a bit different:
.Important methods of the `StatelessSession` .Important methods of the `StatelessSession`
[cols=",2"] [%autowidth.stretch]
|=== |===
| Method name and parameters | Effect | Method name and parameters | Effect
@ -653,7 +658,7 @@ lock mode can be used to request a pessimistic lock, or to customize the behavio
of optimistic locking: of optimistic locking:
.Optimistic and pessimistic lock modes .Optimistic and pessimistic lock modes
[cols=",4"] [cols="26,~"]
|=== |===
| `LockMode` type | Meaning | `LockMode` type | Meaning

View File

@ -4,25 +4,38 @@ page:
font: font:
catalog: catalog:
merge: false merge: false
Roboto: Source Sans Pro:
normal: Roboto-Regular.ttf normal: SourceSansPro-Regular.ttf
italic: Roboto-Italic.ttf italic: SourceSansPro-Italic.ttf
bold: Roboto-Bold.ttf bold: SourceSansPro-Bold.ttf
bold_italic: Roboto-BoldItalic.ttf bold_italic: SourceSansPro-BoldItalic.ttf
Roboto Light: Source Sans Pro Light:
normal: Roboto-Light.ttf normal: SourceSansPro-Light.ttf
italic: Roboto-LightItalic.ttf italic: SourceSansPro-LightItalic.ttf
Emoji: bold: SourceSansPro-SemiBold.ttf
bold_italic: SourceSansPro-SemiBoldItalic.ttf
Inconsolata Light:
normal: Inconsolata-Light.ttf
bold: Inconsolata-Light.ttf
italic: Inconsolata-Light.ttf
OpenSansEmoji:
normal: OpenSansEmoji.ttf normal: OpenSansEmoji.ttf
bold: OpenSansEmoji.ttf bold: OpenSansEmoji.ttf
italic: OpenSansEmoji.ttf italic: OpenSansEmoji.ttf
bold_italic: OpenSansEmoji.ttf bold_italic: OpenSansEmoji.ttf
NotoEmoji:
normal: NotoEmoji.ttf
bold: NotoEmoji.ttf
italic: NotoEmoji.ttf
bold_italic: NotoEmoji.ttf
fallbacks: fallbacks:
- Emoji - OpenSansEmoji
- NotoEmoji
- Source Sans Pro
base: base:
font: font:
color: #151e3d color: #151e3d
family: Roboto family: Source Sans Pro
size: 9 size: 9
line-height-length: 11.5 line-height-length: 11.5
line-height: $base-line-height-length / $base-font-size line-height: $base-line-height-length / $base-font-size
@ -31,13 +44,19 @@ prose:
image: image:
width: 70% width: 70%
align: center align: center
codespan:
font:
size: 8.5
family: Inconsolata Light
color: #281e5d
code: code:
font-size: 8 font:
font-color: #281e5d size: 8.5
color: #281e5d
family: Inconsolata Light
border-width: 0 border-width: 0
padding: [4,4,4,20] padding: [4,4,4,20]
# background-color: #f7f7f7 # background-color: #f7f7f7
# font-family: Inconsolata
sidebar: sidebar:
border-width: 0 border-width: 0
title: title:
@ -64,6 +83,7 @@ list:
indent: $base-font-size * 1.5 indent: $base-font-size * 1.5
item-spacing: 2 item-spacing: 2
table: table:
font-size: 8.5
caption: caption:
text-align: right text-align: right
side: top side: top
@ -79,9 +99,6 @@ table:
background-color: #f0f0f0 background-color: #f0f0f0
cell: cell:
padding: 6 padding: 6
codespan:
font-size: 8
font-color: #281e5d
footer: footer:
border-width: 0 border-width: 0
quote: quote: