[hibernate-dev] SQM domain type model

Steve Ebersole steve at hibernate.org
Thu Dec 3 11:36:26 EST 2015


I mean that getting information out of them is not easy.  Especially
EntityPersister - specifically getting sub/super information, attribute
information, etc.


On Thu, Dec 3, 2015 at 10:30 AM andrea boriero <dreborier at gmail.com> wrote:

> after reading your mail, I'm more inclined towards the solution you
> started implementing in SQM-28-2.
>
> https://github.com/sebersole/hibernate-semantic-query/blob/SQM-28-2/hibernate-sqm/src/main/java/org/hibernate/sqm/domain/DomainMetamodel.java
>
> Just a clarification, what do you mean when you say "the Hibernate ORM
> type system is not very consumption friendly"
>
> Thanks
>
>
>
> On 3 December 2015 at 15:38, Steve Ebersole <steve at hibernate.org> wrote:
>
>> SQM needs information about the domain model being queried.  In the
>> initial original Antlr redesign work I did, I opted for a completely new
>> "type system" specific to the parsing.  The main reason for this was to
>> allow for "other consumers" (besides Hibernate ORM) of its services.  By
>> and large we have all agreed that should no longer be a design
>> requirement.  But that still leaves us with the question of what we should
>> do in SQM moving forward.  We have a few options on how to achieve this.
>> At the highest level we could either reuse an existing type system or we
>> could develop a "SQM specific" type system.
>>
>> Reusing an existing type system really boils down to 2 options:
>> 1) Use the Hibernate ORM type system (Type, EntityPersister,
>> CollectionPersister)
>> 2) Use the JPA type system (javax.persistence.metamodel.Type, etc)
>>
>> I have a prototype[1] of SQM using the JPA type system.  There are some
>> major limitations to this approach, as well as some very significant
>> benefits.  The main benefit is that it makes it much more trivial to
>> interpret JPA criteria queries (no conversion between type systems).
>> However, as I said the limitations are pretty significant.  Put simply,
>> the
>> JPA type system is very inflexible and certain concepts in Hibernate
>> simply
>> would not fit such; this includes ANY type mappings, dynamic
>> (EntityType.MAP, etc) model types, BAG and IDBAG collections, etc.  Also,
>> it defines a lot of things we don't need nor care about for query
>> translation.  All in all, I'd vote against this.
>>
>> Using the HIbernate type system is a viable alternative.  Though I think
>> that works best if we move SQM in its entirety upstream into the ORM
>> project (otherwise we have a bi-directional set of dependencies).  The
>> only
>> drawback is that the Hibernate ORM type system is not very consumption
>> friendly ;)
>>
>> The flip side is to develop a SQM-specific type system.  We have 2
>> prototypes of that at the moment.  First[2] is the original one I pretty
>> much copied directly over from the original Antlr redesign work I
>> mentioned
>> above.  I'd against vote against this one; I started looking at
>> alternatives for a (few) reason(s) ;)  The second[3] is one I developed
>> loosely based on the JPA type system, but more flexible, more aligned with
>> Hibernate concepts and limited to just query translation-related concerns.
>>
>> I am open to alternatives too.  Thoughts?
>>
>> [1]
>>
>> https://github.com/sebersole/hibernate-semantic-query/blob/SQM-28/hibernate-sqm/src/main/java/org/hibernate/sqm/domain/ExtendedMetamodel.java
>> [2]
>>
>> https://github.com/sebersole/hibernate-semantic-query/blob/master/hibernate-sqm/src/main/java/org/hibernate/sqm/domain/ModelMetadata.java
>> [3]
>>
>> https://github.com/sebersole/hibernate-semantic-query/blob/SQM-28-2/hibernate-sqm/src/main/java/org/hibernate/sqm/domain/DomainMetamodel.java
>>
> _______________________________________________
>> 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