[hibernate-dev] Hibernate.getImplementation(Object)

Emmanuel Bernard emmanuel at hibernate.org
Thu May 24 10:44:29 EDT 2007


This is what I want to return one way or an other... or CGLIB should  
fill up the superclass fields.

On 24 mai 07, at 01:02, Max Rydahl Andersen wrote:

> afaik ( ( HibernateProxy ) value ).getHibernateLazyInitializer 
> ().getImplementation() haven't changed almost since beginning of  
> times.
>
> But exposing it on the Hibernate class API would be wrong IMO since  
> the return value would be the underlying object instead of the  
> proxy, or
> do I misunderstand what you want it to return ?
>
> /max
>
>> I know that Max :)
>> I do not expose it to the user, it's just how HSearch internally  
>> deal with it during the transparent indexation process, so I do  
>> not break the == operation from a user point of view. Note that we  
>> expose that to the user anyway through load/initialize/get, I'm  
>> just begging for a facilitator.
>> Currently my code is fairly weak, since Steve can refactor  
>> anytime  LazyInitializer using an AST parser and a maven POM  
>> approach, because... you know ;-)
>> I'm fine is we consider HibernateProxy and LazyInitializer as  
>> public APIs but it's not the case today, or at least I'm fine if  
>> we define an extended contract between Search and Core so that it  
>> won't break between micro versions.
>>
>> On 23 mai 07, at 19:24, Max Rydahl Andersen wrote:
>>
>>> why are you ever in need of touching the field values directly ?
>>>
>>> Accessing and potentially exposing the underlying object of a  
>>> proxied entity should be strictly prohibted
>>> since otherwise you easily end up with breaking ==
>>>
>>> /max
>>>
>>>> For Hibernate Search I came to a problem.
>>>> When a user choose field access.
>>>> When I access a previously uninitialized object, and even if I  
>>>> initialize it (Hibernate.initialize()).
>>>>
>>>> The field access End up returning null all the time because of  
>>>> the way lazy loading is done. I worked around that using some of  
>>>> the code from Hibernate.initialize()
>>>>
>>>> 		if ( value instanceof HibernateProxy ) {
>>>> 			value = ( ( HibernateProxy )  
>>>> value ).getHibernateLazyInitializer()
>>>> 					.getImplementation();
>>>> 		}
>>>>
>>>> But it seems it really should be part of the Hibernate class  
>>>> contract.
>>>>
>>>> I could use
>>>>
>>>> 		Hibernate.initialize(value);
>>>> 		value = session.get( Hibernate.getClass(value),  
>>>> session.getIdentifier(value) );
>>>>
>>>> but at the present time, it's hard for me to access the session,  
>>>> and conceptually speaking there is no real need for it.
>>>>
>>>> How about exposing this service in Hibernate class either
>>>>
>>>> 		value = Hibernate.initialize(value); //changing the return value
>>>> or
>>>> 		value = Hibernate.getImplementation(value);
>>>>
>>>> WDYT?
>>>> _______________________________________________
>>>> hibernate-dev mailing list
>>>> hibernate-dev at lists.jboss.org
>>>> https://lists.jboss.org/mailman/listinfo/hibernate-dev
>>>
>>>
>>>
>>> ----
>>> Max Rydahl Andersen
>>> callto://max.rydahl.andersen
>>>
>>> Hibernate
>>> max at hibernate.org
>>> http://hibernate.org
>>>
>>> JBoss a division of Red Hat
>>> max.andersen at jboss.com
>>
>
>
>
> -- 
> --
> Max Rydahl Andersen
> callto://max.rydahl.andersen
>
> Hibernate
> max at hibernate.org
> http://hibernate.org
>
> JBoss a division of Red Hat
> max.andersen at jboss.com




More information about the hibernate-dev mailing list