ThreeTen-JPA JDBC 4.2 Hibernate

Extensions for JDBC 4.2 and Hibernate

License

License

MIT
Categories

Categories

Hibernate Data ORM
GroupId

GroupId

com.github.marschall
ArtifactId

ArtifactId

threeten-jpa-jdbc42-hibernate
Last Version

Last Version

1.12
Release Date

Release Date

Type

Type

jar
Description

Description

ThreeTen-JPA JDBC 4.2 Hibernate
Extensions for JDBC 4.2 and Hibernate

Download threeten-jpa-jdbc42-hibernate

How to add to project

<!-- https://jarcasting.com/artifacts/com.github.marschall/threeten-jpa-jdbc42-hibernate/ -->
<dependency>
    <groupId>com.github.marschall</groupId>
    <artifactId>threeten-jpa-jdbc42-hibernate</artifactId>
    <version>1.12</version>
</dependency>
// https://jarcasting.com/artifacts/com.github.marschall/threeten-jpa-jdbc42-hibernate/
implementation 'com.github.marschall:threeten-jpa-jdbc42-hibernate:1.12'
// https://jarcasting.com/artifacts/com.github.marschall/threeten-jpa-jdbc42-hibernate/
implementation ("com.github.marschall:threeten-jpa-jdbc42-hibernate:1.12")
'com.github.marschall:threeten-jpa-jdbc42-hibernate:jar:1.12'
<dependency org="com.github.marschall" name="threeten-jpa-jdbc42-hibernate" rev="1.12">
  <artifact name="threeten-jpa-jdbc42-hibernate" type="jar" />
</dependency>
@Grapes(
@Grab(group='com.github.marschall', module='threeten-jpa-jdbc42-hibernate', version='1.12')
)
libraryDependencies += "com.github.marschall" % "threeten-jpa-jdbc42-hibernate" % "1.12"
[com.github.marschall/threeten-jpa-jdbc42-hibernate "1.12"]

Dependencies

provided (6)

Group / Artifact Type Version
org.hibernate : hibernate-core jar 5.4.0.Final
org.jboss.spec.javax.xml.bind : jboss-jaxb-api_2.2_spec jar 1.0.5.Final
org.jboss.spec.javax.annotation : jboss-annotations-api_1.2_spec jar 1.0.2.Final
org.eclipse.persistence : javax.persistence jar 2.2.1
javax.transaction : javax.transaction-api jar 1.3
org.hibernate : hibernate-jpamodelgen jar 5.4.0.Final

test (22)

Group / Artifact Type Version
com.github.marschall : threeten-jpa-test jar 1.12
org.junit.jupiter : junit-jupiter-api jar 5.3.2
org.junit.jupiter : junit-jupiter-params jar 5.3.2
org.junit.jupiter : junit-jupiter-engine jar 5.3.2
org.junit.platform : junit-platform-launcher jar 1.3.2
org.hamcrest : hamcrest-junit jar 2.0.0.0
org.hibernate : hibernate-entitymanager jar 5.4.0.Final
org.springframework : spring-core jar 5.1.3.RELEASE
org.springframework : spring-context jar 5.1.3.RELEASE
org.springframework : spring-orm jar 5.1.3.RELEASE
org.springframework : spring-test jar 5.1.3.RELEASE
org.hsqldb : hsqldb jar 2.4.1
org.apache.derby : derby jar 10.14.2.0
org.postgresql : postgresql jar 42.2.5
mysql : mysql-connector-java jar 8.0.13
org.mariadb.jdbc : mariadb-java-client jar 2.3.0
org.firebirdsql.jdbc : jaybird-jdk18 jar 3.0.5
com.h2database : h2 jar 1.4.197
com.microsoft.sqlserver : mssql-jdbc jar 6.4.0.jre8
org.apache.logging.log4j : log4j-core jar 2.11.1
org.apache.logging.log4j : log4j-slf4j-impl jar 2.11.1
org.apache.logging.log4j : log4j-jcl jar 2.11.1

Project Modules

There are no modules declared in this project.

ThreeTen JPA Maven Central Build Status

JPA attribute converters for JSR-310 (Java 8) dates and times.

This project was stop gap measure until JPA_SPEC-63 was fixed in JPA 2.2. However JSR-310 support in JPA is not ready for prime time. The project serves the following purposes:

  1. provide JSR-310 support for users on JPA 2.1
  2. provide support for additional JSR-310 data types not specified by JPA 2.2
  3. provide workarounds for driver bugs and missing driver features
  4. provide workarounds for JPA implementation bugs

We take inspiration from the JDBC 4.2 and currently support the following conversions:

ANSI SQL Java SE 8
DATE LocalDate
TIME LocalTime
TIMESTAMP LocalDateTime
TIMESTAMP WITH TIMEZONE OffsetTime (*)
TIMESTAMP WITH TIMEZONE ZonedDateTime (*)
INTERVAL YEAR TO MONTH Period (*)
INTERVAL DAY TO SECOND Duration (*)

(*) requires special extensions, see below

Not supported is converting TIME WITH TIMEZONE to OffsetTime because it seems not very useful.

This project requires Java SE 8 (for the date and time classes) and JPA 2.1 (for the attribute converters). Java SE 9 is supported as well.

This project is very similar to montanajava/jpaattributeconverters or perceptron8/datetime-jpa and can be used in much the same way.

Usage

<dependency>
    <groupId>com.github.marschall</groupId>
    <artifactId>threeten-jpa</artifactId>
    <version>1.12</version>
</dependency>
<persistence-unit>
    …
    <class>com.github.marschall.threeten.jpa.LocalTimeConverter</class>
    <class>com.github.marschall.threeten.jpa.LocalDateConverter</class>
    <class>com.github.marschall.threeten.jpa.LocalDateTimeConverter</class>
    …
</persistence-unit>
@Entity
public class SampleEntity {

  @Column
  private LocalDate localDate;

  @Column
  private LocalTime localTime;

  @Column
  private LocalDateTime localDateTime;
  
}

All the converters have set Converter#autoApply() to true so they're automatically applied to all entities in the same persistence unit.

Converters

You can find a complete list of all converters in the Javadoc

Time Zone Support

Time Zone Support is documented on the wiki.

Interval Support

Oracle Interval Support is documented on the wiki.

Hibernate 5.x

If you are on Hibernate 5.x and JDBC driver properly supports JDBC 4.2 we strongly recommend using the UserTypes from the threeten-jpa-jdbc42-hibernate subproject.

If your driver does not support JDBC 4.2 the hibernate-java8 module introduced in Hibernate 5.0.0 (no longer needed for Hibernate 5.2.0) provides functionality that is equivalent to threeten-jpa and we recommend you use the Hibernate support instead.

Project Structure

The project includes the following submodule:

  • threeten-jpa contains portable converters.
  • threeten-jpa-oracle-eclipselink contains extensions that work only with Oracle in combination with EclipseLink to map TIMESTAMP WITH TIMEZONE to ZonedDateTime or OffsetDateTime.
  • threeten-jpa-h2-eclipselink contains extensions that work only with H2 in combination with EclipseLink to map TIMESTAMP WITH TIMEZONE to OffsetDateTime.
  • threeten-jpa-mssql-eclipselink contains extensions that work only with an old SQL Server driver in combination with EclipseLink to map DATETIMEOFFSET to OffsetDateTime.
  • threeten-jpa-mssql-hibernate contains extensions that work only with an old SQL Server driver SQL Server in combination with Hibernate to map DATETIMEOFFSET to OffsetDateTime.
  • threeten-jpa-oracle-hibernate contains extensions that work only with Oracle in combination with Hibernate to map TIMESTAMP WITH TIMEZONE to ZonedDateTime to OffsetDateTime.
  • threeten-jpa-jdbc42-hibernate contains extensions that work with any JDBC 4.2 compliant driver in combination with Hibernate. They map
  • TIMESTAMP WITH TIMEZONE to ZonedDateTime or OffsetDateTime
  • TIMESTAMP [ WITHOUT TIME ZONE ] to LocalDateTime
  • TIME to LocalTime
  • threeten-jpa-oracle-impl contains the type conversion code from Oracle types to Java 8 types.
  • threeten-jpa-zoned-hibernate contains composite user types to support ZonedDateTime.

Tested with following JPA providers:

  • EclipseLink
  • Hibernate

Tested with the following databases:

  • Derby
  • Firebird
  • H2
  • HSQL
  • MariaDB
  • MySQL
  • Oracle
  • PostgreS
  • SQL Server

DB2 is currently not supported as IBM does not ship a JDBC 4.2 driver.

License

This project is licensed under the MIT license.

Versions

Version
1.12
1.11
1.10.0
1.9.1
1.9.0
1.8.1
1.8.0
1.7.0
1.6.0
1.5.1
1.5.0
1.4.1
1.4.0
1.3.0