Ideally a isSynthetic() check is best.  It's what I considered first. 
However I tend to stay away from changing these mapping classes as 
historically I have sometimes screwed up Max and other mapping package 
consumers in ways I totally did not expect.

Max, do you see any potential issue with this?

On 03/30/2010 04:55 AM, Emmanuel Bernard wrote:
> Your reading is correct.
> We create a synthetic property that we use to populate the *-to-one 
> property-ref element.
> The reason behind it is that JPA is more flexible than Core and allow to 
> reference columns instead of properties. This could lead to reference columns 
> coming from different properties, in different order than the one described 
> in the "referenced property" etc etc.
>
> To work around that, I create a synthetic property. Note that the particular 
> case of http://opensource.atlassian.com/projects/hibernate/browse/HHH-4870 
> could be optimized as we don't need the synthetic property ( there is a 
> //todo in the code about that :) ).
>
> You're right, we probably should create a SyntheticProperty type (subclassing 
> Property like BackRef) and add a isSynthetic getter on the Property contract. 
> If we are good with that, I can implement that fairly quickly.
>
> On 30 mars 2010, at 03:42, Steve Ebersole wrote:
>
>> Little more info.  The generated property is coming from
>> BinderHelper.createSyntheticPropertyReference as called from
>> org.hibernate.cfg.ToOneFkSecondPass#doSecondPass
>>
>> The mappings in question here are:
>>
>> public class Company {
>>      @Id
>>      @Column(name = "entity_id")
>>      @GeneratedValue(strategy = GenerationType.SEQUENCE, generator =
>> "SEQ_STORE")
>>      private Long id = null;
>>
>>      @Column(name = "id", nullable = false, unique = true, updatable =
>> false)
>>      private Long companyId = null;
>>
>>      ...
>> }
>>
>> public class Person {
>>      ...
>>      @ManyToOne(fetch = FetchType.LAZY)
>>      @JoinColumn(name = "relation_id", referencedColumnName = "id")
>>      private Company company = null;
>> }
>>
>> The binder code is creating a synthetic component property on Company
>> presumably (?) to act as the FK target for this ManyToOne.  Is that the
>> correct reading of what is going on?  I have no clue what is a valid use
>> case for doing this so I am largely making an educated guess at what is
>> going on here.
>>
>> Lets assume that this "synthetic property is needed"...  In that case
>> I'd then say that it seems to me we need to create it in such a manner
>> that it is distinguishable from a "real" property so that it can later
>> be excluded during the @StaticMetamodel binding process (very much like
>> we do already for back-refs).
>>
>> To that end I committed a change that resolved this for the test case
>> submitted by Andreas to HHH-4870.  It caused no regressions.
>>
>> On related topic, anyone have thoughts on good way to test this
>> @StaticMetamodel binding code?
>>
>>
>> On 03/29/2010 12:28 PM, Steve Ebersole wrote:
>>> In regards to
>>> http://opensource.atlassian.com/projects/hibernate/browse/HHH-4870 I
>>> have taken a look at the test case. The issue comes from a property that
>>> annotation-binder is generating that I have no idea why it is.
>>> Specifically, take a look at the comment:
>>> http://opensource.atlassian.com/projects/hibernate/browse/HHH-4870?focusedCommentId=35997&page=com.atlassian.jira.plugin.system.issuetabpanels%3Acomment-tabpanel#action_35997
>>>
>>>
>>> Anyone have any ideas?
>>>
>>>
>>
>> --
>> st...@hibernate.org
>> http://hibernate.org
>> _______________________________________________
>> hibernate-dev mailing list
>> hibernate-dev@lists.jboss.org
>> https://lists.jboss.org/mailman/listinfo/hibernate-dev
>

-- 
st...@hibernate.org
http://hibernate.org
_______________________________________________
hibernate-dev mailing list
hibernate-dev@lists.jboss.org
https://lists.jboss.org/mailman/listinfo/hibernate-dev

Reply via email to