[hibernate-dev] 6.0 - Dialect "initialization" proposal

Sanne Grinovero sanne at hibernate.org
Fri Jun 16 11:46:56 EDT 2017


Could we have a way to configure a "dialect builder" (or factory) instead?

I'd love to have dialects immutable.

On Fri, 16 Jun 2017, 17:33 Steve Ebersole, <steve at hibernate.org> wrote:

> Another change that has been discussed for a long time has been adding the
> ability for Dialects to initialize themselves (or some "environment"
> delegate) based on database/driver info including version info.  The idea
> would be to get out of having to define new Dialects just for some minor
> update in a database or driver that Hibernate needs to be aware of - the
> Dialect would be allowed to make that distinction itself based on access to
> this info.
>
> As hinted above, I am not sure yet if the best approach to this is to have
> the Dialect configure itself (least disruptive) or have it configure some
> "environment" (an expanded JdbcEnvironment maybe).  But regardless, the
> idea is the same.
>
> The proposal centers around 2 contracts:
>
>    1. Dialect itself and some "Dialect#initialize" method
>    2. A way to give Dialect#initialize access to the needed information.
>
> Let's start with (2) as it is the more defined.  The basic idea would be
> similar to the existing
> `org.hibernate.engine.jdbc.dialect.spi.DialectResolutionInfo` contract.
> The initial idea is something like
> https://gist.github.com/sebersole/5af5bc5456701054632dd0eb65403505
>
> For (1) there is still the question of whether Dialect#initialize affects
> the Dialect itself or generates some "environment" object.  But assuming
> that it affects the Dialect itself, we would have something as simple as:
>
>     DatabaseInformation dbInfo = resolveDatabaseInformation(...);
>     Dialect dialect = resolveDialect( dbInfo );
>     dialect.initialize( dbInfo );
>
> Or if we decide it should produce an environment object, something like:
>
>     DatabaseInformation dbInfo = resolveDatabaseInformation(...);
>     Dialect dialect = resolveDialect( dbInfo );
>     TheEnvironment env = dialect.initialize( dbInfo );
>
> To note, we pass DatabaseInformation into #resolveDialect because it needs
> some of that info (database-name / driver-name mainly) to decide on the
> Dialect.
>
> The end game here is that we would have single Dialects per database.  E.g.
> we'd have just:
>
>    1. OracleDialect
>
> instead of:
>
>    1. OracleDialect
>    2. Oracle8iDialect
>    3. Oracle9Dialect
>    4. Oracle9iDialect
>    5. Oracle10gDialect
>    6. Oracle12cDialect
>    7. ...
> _______________________________________________
> hibernate-dev mailing list
> hibernate-dev at lists.jboss.org
> https://lists.jboss.org/mailman/listinfo/hibernate-dev
>


More information about the hibernate-dev mailing list