[hibernate-dev] hiberate-commons-annotations and locating annotations
Steve Ebersole
steve at hibernate.org
Tue Sep 3 18:22:22 EDT 2013
After looking through this some more, I think what you say could almost
work. But:
1) Still need a way to determine the declarer of a property rather than
just blindly accepting XProperty.getAnnotation(Convert.class). This is
needed for the Super/Sub MappedSuperclass/Entity case in my initial
email to properly interpret Convert precedence. Is the best option
here a change to hibernate-commons-annotations, and if so what change
specifically? Adding `XClass XProperty#getDeclarer()`?
2) As you say, AbstractPropertyHolder does account for
subclass/superclass precedence during its init. But I am not sure how
to hook in normalized path-based handling here.
2.a) It seems like there are times when
org.hibernate.cfg.AbstractPropertyHolder#parent would be useful for
what I need to do. But there appears to be times when this is null.
For entity mappings (ClassPropertyHolder) thats fine. But for the
others, that would be problematic. Going back to the
Person#homeAddress example, I'd really need the ComponentPropertyHolder
for Person#homeAddress to register the converts with
ClassPropertyHolder<Person> under the "homeAddress" base key
("homeAddress.city" for example). Is there a time here where
AbstractPropertyHolder#parent would be null for
ComponentPropertyHolder/CollectionPropertyHolder?
2.b) Is this AbstractPropertyHolder#parent the best way you see to
handle path-based converts? Or do you see a better option?
On Fri 30 Aug 2013 10:52:40 AM CDT, Emmanuel Bernard wrote:
> On Fri 2013-08-30 10:13, Steve Ebersole wrote:
>> Hit send too early...
>>
>>
>> On 08/30/2013 09:55 AM, Steve Ebersole wrote:
>>> Also, unless we have some normalization rules, my point was that
>>> we literally cannot do this today in annotations.
>>>
>>> Essentially the bug-a-boo is composites (and maybe collections as
>>> composite via allowance of "map.", etc). We'd essentially have to
>>> normalize all paths for converters to be the composite form
>>> relative to the "root" composite parent. In other words, given
>>> the "Person.homeAddress.country" example (home address being
>>> embedded of type Address), we'd have to normalize all path
>>> references for converters to be "homeAddress.country" and
>>> kept/managed on Person. The trouble is that this makes the order
>>> in which we process these levels very important, and I am just not
>>> sure I trust binders as they are to enforce that ordering.
>>
>> This ^^ is difficult to achieve in the "annotation reader".
>
> That's what is done for Attribute Override in AbstractPropertyHolder.
> You can control the order in which sub/spuer class a processed it and
> control how composition from a property holder to its parent is done.
More information about the hibernate-dev
mailing list