java.sql2 annotation usage

Lukas Eder lukas.eder at gmail.com
Mon Oct 23 18:41:13 UTC 2017


Lance,

2017-10-20 21:17 GMT+02:00 Lance Andersen <lance.andersen at oracle.com>:

> Hi Philippe,
>
> So we are all on the same page,  you are talking about using the
> Converter annotation which requires the class to  implement
> AttributeConveter.
>
> This is fairly flexible.


> I can see a use case for  Hibernate UserTypes, but not sure I am convinced
> that is a must for the initial release.
>
> Lukas,  Can you provide an example from JOOQ comparing to the JPA model


jOOQ also has an org.jooq.Converter<T, U> type that works just like JPA's
AttributeConverter (it is not passed to a data type through an annotation,
but through explicit type building API, but that's a detail):
https://www.jooq.org/javadoc/latest/org/jooq/Converter.html

The Converter SPI is an easy  entry point for simple data type conversion
that works in most cases. But as Philippe mentioned, often a more low level
SPI is needed, which has access to the underlying JDBC API. In jOOQ, this
is org.jooq.Binding<T, U> (which may contain a Converter):
https://www.jooq.org/javadoc/latest/org/jooq/Binding.html

It offers interception points for 7 distinct JDBC-facing operations, which
include all the patterns:

- Getting a value out of a ResultSet
- Getting a value out of a SQLInput
- Getting a value out of a CallableStatement
- Registering an OUT parameter on a CallableStatement
- Setting a value on a SQLOutput
- Setting a value on a PreparedStatement
- Generating the SQL string for the bind variable (e.g. "?" or "CAST(? AS
MY_TYPE)", etc.)

This has worked very well for every single-valued data type that I've seen
so far. Hibernate's UserType is somewhat similar, although more limited in
what it can do, and in how it can be evolved backwards compatibly.

A minor feature of this SPI is its capability to be evolved backwards
compatibly, as every SPI method contains an "IN OUT" argument object,
instead of a fixed set of primitive typed arguments / return types. Some
thoughts about that here:
https://blog.jooq.org/2015/05/21/do-not-make-this-mistake-when-developing-an-spi

I think that such an SPI could be designed for the new JDBC API as well.

Hope this helps,
Lukas


More information about the jdbc-spec-discuss mailing list