[hibernate-dev] Entity name in the context of JPA2 meta model (HHH-5709).

Tomasz Blachowicz tblachowicz at gmail.com
Wed Nov 3 10:18:38 EDT 2010


You can have a look at my pull request to see exaclty what I mean.
https://github.com/hibernate/hibernate-core/pull/9 (two commits form that
branch)

On Wed, Nov 3, 2010 at 1:54 PM, Tomasz Blachowicz <tblachowicz at gmail.com>wrote:

> I think I understand what you mean. "Node name" might not be indeed the
> best way to do that.
>
> I think implementation of the EntityBinder with regards to the handling of
> @Entity.name is correct. My understanding of the jsr-317 is that the entity
> name used in queries should be @Entity.name if specified otherwise the
> default value that is unqualified name of the entity class. This is how
> EntityBinder works now I presume (EntityBinder#bindEjb3Annotation(@Entity)).
> The think is that this value is set to the name field of EntityBinder and
> then used to set PresistentClass#setNodeName().
>
> I wonder how I could implement the meta model change to make sure the
> EntityType#getName() returns @Entity.name or unqualified class name in case
> the @Entity.name has not been specified. How about adding new property to
> the PersistentClass that would hot the value as computed in EntityBinder and
> the I could use the value of this property to populate EntityTypeImpl from
> MetamodelImpl#buildEntityType? Can you comment that approach?
>
>
> On Wed, Nov 3, 2010 at 1:22 PM, Steve Ebersole <steve at hibernate.org>wrote:
>
>> Ah, I misread.  I thought you meant the Hibernate notion of an "entity
>> name".
>> As far as I can tell now looking at it, there is no such annotation equiv
>> for
>> that.
>>
>> @javax.persistence.Entity.name is really more akin to Hibernate's notion
>> of an
>> import name for queries.
>>
>> I am not really understanding the benefit of returning the query import
>> name
>> for EntityType.getName().  Personally I think its just a case of badly
>> matched
>> attribute names and an inference being drawn there.
>>
>> But we do not really use that internally, so i have no qualms with
>> changing it
>> I guess.  However, I do not want "node name" used.  That is a totally
>> different beast, and if annotations ever support alternate entity modes
>> this
>> will become a problem in this code you suggest; its currently working just
>> by
>> a quirk where the default node name just happens to be the unqualified
>> entity
>> name, and I am assuming the annotation binding code is setting it if
>> @Entity.name is specified as well.  To be honest, after looking at
>> org.hibernate.cfg.annotations.EntityBinder#bindEntity my first thought was
>> whether this code even handles @Entity.name properly in terms of making it
>> an
>> import name.  It would work as is for the default case because that is
>> Hibernate's internal default behavior (to register the unqualified entity
>> name
>> as an import name).
>>
>>
>> On Wednesday, November 03, 2010, at 07:58 am, Steve Ebersole wrote:
>> > If that is really the case, then that is a problem with the annotation
>> > binding code.
>> >
>> > On Wednesday, November 03, 2010, at 06:50 am, Tomasz Blachowicz wrote:
>> > > Hi Steve,
>> > >
>> > > PersistentClass#getEntityName is not good, because it is exactly the
>> same
>> > > value as PersistentClass#getClassName.
>> > > PersistentClass#getClassName is populated in
>> > > org.hibernate.cfg.annotations.EntityBinder#bindEntity with the value
>> from
>> > > org.hibernate.annotations.common.reflection.java.JavaXClass#getName.
>> > > JavaXClass#getName is implemented as clazz.getName(), so it is always
>> > > class name and the @Entity.name is simply ignored for the purpose of
>> the
>> > > entity name. And this is the reason I used PersistentClass#getNodeName
>> > > that returns @Entity.name or "unqualified" class name in case
>> > > @Entity.name is unspecified.
>> > >
>> > > If I'd stick with PersistentClass#getEntityName the issues is not
>> > > resolved and EntityType.getName() returns stil FQN of the class
>> instead
>> > > of @Entity.name or "unqualified" class name.
>> > >
>> > > Regards,
>> > > Tom
>> > >
>> > > On Wed, Nov 3, 2010 at 11:12 AM, Steve Ebersole <steve at hibernate.org>
>> wrote:
>> > > > Uncertain yet of how these pull request comments work on GitHub, so
>> I
>> > > > thought
>> > > > I'll make sure and respond here.  The change should use
>> > > > org.hibernate.mapping.PersistentClass#getEntityName instead of
>> > > > org.hibernate.mapping.PersistentClass#getNodeName.
>> > > >
>> > > > See my other email to the dev list about porting to 3.6
>> > > >
>> > > > On Wednesday, November 03, 2010, at 05:48 am, Tomasz Blachowicz
>> wrote:
>> > > > > I've submitted the pull request (
>> > > > > https://github.com/hibernate/hibernate-core/pull/8) for master. I
>> > > > > should have it also ready for 3.6 branch as soon as I manage to
>> merge
>> > > > > the change between branches in this git thng that is pretty new to
>> me
>> > > > > ;)
>> > > > >
>> > > > > On Tue, Nov 2, 2010 at 1:18 PM, Emmanuel Bernard
>> > > >
>> > > > <emmanuel at hibernate.org>wrote:
>> > > > > > Cool :)
>> > > > > > If you use GitHub's infrastructure and use a pull-request, we
>> can
>> > > > > > get that integrated quite fast.
>> > > > > >
>> > > > > > On 2 nov. 2010, at 13:50, Tomasz Blachowicz wrote:
>> > > > > >
>> > > > > > I've already created the ticket (
>> > > > > >
>> http://opensource.atlassian.com/projects/hibernate/browse/HHH-5709)
>> > > > > > . And I should be able to create the patch sometime this
>> evening.
>> > > > > >
>> > > > > > Cheers,
>> > > > > > Tom
>> > > > > >
>> > > > > > On Tue, Nov 2, 2010 at 12:24 PM, Emmanuel Bernard
>> > > >
>> > > > <emmanuel at hibernate.org>wrote:
>> > > > > >> I'd say you're correct and the name should match in the
>> metamodel.
>> > > > > >> Can you open a JIRA issue and even better try and work out a
>> > > > > >> patch?
>> > > > > >>
>> > > > > >> PS: I've spilled hot chocolate on my laptop in the past: not
>> good,
>> > > > > >> the machine slowly but inevitably dies as corrosion wins it
>> over.
>> > > > > >>
>> > > > > >> On 2 nov. 2010, at 12:35, Tomasz Blachowicz wrote:
>> > > > > >> > Hi,
>> > > > > >> >
>> > > > > >> > I had been working recently on some stuff that deals with
>> JPA2
>> > > > > >> > meta
>> > > > > >>
>> > > > > >> model.
>> > > > > >>
>> > > > > >> > Hibernate is my JPA2 provider/engine. Everything works fine
>> > > > > >> > except
>> > > >
>> > > > one
>> > > >
>> > > > > >> > little thing that is name of the Entity. I'd expect that
>> value
>> > > > > >> > returned
>> > > > > >>
>> > > > > >> by
>> > > > > >>
>> > > > > >> > EntityType.getName() would be the same as @Entity.name but
>> not
>> > > > > >> > the
>> > > >
>> > > > FQN
>> > > >
>> > > > > >> of
>> > > > > >>
>> > > > > >> > the entity class. Although this is not explicitly stated in
>> the
>> > > > > >> > JPA2 specification it is reasonable to expect that
>> @Entity.name
>> > > > > >> > or the
>> > > > > >>
>> > > > > >> default
>> > > > > >>
>> > > > > >> > value (shortened class name) is the name of the entity used
>> in
>> > > >
>> > > > queries
>> > > >
>> > > > > >> ans
>> > > > > >>
>> > > > > >> > well as other places such as meta model. I know the topic of
>> > > > > >> > entity name
>> > > > > >>
>> > > > > >> was
>> > > > > >>
>> > > > > >> > discussed  many times in the past (HHH-2597, HHH-4375,
>> HHH-4465,
>> > > > > >>
>> > > > > >> HHH-5709),
>> > > > > >>
>> > > > > >> > and the rationale has been given for current implementation
>> of
>> > > > > >>
>> > > > > >> Hibernate,
>> > > > > >>
>> > > > > >> > however the topic hasn't been touched in the context of meta
>> > > > > >> > model that
>> > > > > >>
>> > > > > >> is
>> > > > > >>
>> > > > > >> > new stuff added in JPA2.
>> > > > > >> >
>> > > > > >> > I just wanted to know what is your thinking with regards to
>> the
>> > > >
>> > > > matter
>> > > >
>> > > > > >> at
>> > > > > >>
>> > > > > >> > this stage and how likely is implementation of Hibernate
>> would
>> > > >
>> > > > change
>> > > >
>> > > > > >> > to match EntityType.getName with @Entity.name.
>> > > > > >> >
>> > > > > >> > P.S.
>> > > > > >> > I just have spilled the entire cup of fresh coffee on my
>> desktop
>> > > >
>> > > > while
>> > > >
>> > > > > >> > writing this message. The mouse seems to be drowned :|
>> > > > > >> >
>> > > > > >> > Cheers,
>> > > > > >> > Tom
>> > > > > >> > _______________________________________________
>> > > > > >> > hibernate-dev mailing list
>> > > > > >> > hibernate-dev at lists.jboss.org
>> > > > > >> > https://lists.jboss.org/mailman/listinfo/hibernate-dev
>> > > > >
>> > > > > _______________________________________________
>> > > > > hibernate-dev mailing list
>> > > > > hibernate-dev at lists.jboss.org
>> > > > > https://lists.jboss.org/mailman/listinfo/hibernate-dev
>> > > >
>> > > > ---
>> > > > Steve Ebersole <steve at hibernate.org>
>> > > > http://hibernate.org
>> > > > _______________________________________________
>> > > > hibernate-dev mailing list
>> > > > hibernate-dev at lists.jboss.org
>> > > > https://lists.jboss.org/mailman/listinfo/hibernate-dev
>> >
>> > ---
>> > Steve Ebersole <steve at hibernate.org>
>> > http://hibernate.org
>>
>> ---
>> Steve Ebersole <steve at hibernate.org>
>> http://hibernate.org
>> _______________________________________________
>> 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