On 27 May 2014, at 12:29, Hardy Ferentschik <ha...@hibernate.org> wrote:

> Thanks for the input. Comments inline.
> 
> On 27 Jan 2014, at 12:01, Emmanuel Bernard <emman...@hibernate.org> wrote:
> 
>> 
>> On 06 May 2014, at 21:43, Hardy Ferentschik <ha...@hibernate.org> wrote:
>> 
>>> Where are we at in this discussion?
>>> 
>>> I think we basically have to main proposals.
>>> 
>>> #1 Don’t include the embedded id per default. If @IndexEmbedded is used via 
>>> the depth parameter there is no way to include the embedded id.
>>>   In order to include the id you would need to use includePaths. depth and 
>>> includePaths can be used in combination, so something like this 
>>>   is possible @IndexedEmbedded( depth = 1, includePaths = “foo.id” ). This 
>>> will include all configured fields of the embedded entity, plus its id.
>>> #2 Don’t include the embedded id per default, but have an additional flag 
>>> on @IndexedEmbedded to include the embedded id. The default would be false.
>>>  To include the id would be something like @IndexedEmbedded( depth = 1, 
>>> includeEmbeddedId = true ) or 
>>>  @IndexedEmbedded(  includePaths = {“foo.a”, “foo.b”, “foo.c”} , 
>>> includeEmbeddedId = true ).
>> 
>> I like #2 much better. It is too complex to ask of the user to understand 
>> how the combination of depth and includePaths work based on fairly arbitrary 
>> rules.
>> I thing the property should be named includeEmbeddedObjectsIds because 
>> embeddedId has a precise meaning in ORM.
> 
> Cool. Seems we have now several votes for this approach. I will start 
> implementing it then. 
> +1 also for ‘includeEmbeddedObjectsIds'
> 
>> One question in that case, what does this one do
>> 
>>   @IndexedEmbedded( includePath = { “foo.id” }, includeEmbeddedId=false 
>> //default )
>> 
>> I think we should honour includePath according to the additive rule 
>> mentioned earlier and the path of least surprise.
> 
> Sounds reasonable.
> 
>>> On top of this we seem to agree that it is a good idea to set the default 
>>> depth value of @IndexedEmbedded to 0. This avoids the change in default 
>>> values,
>>> when includePaths is used. As a side effect the default @IndexedEmbedded 
>>> annotation becomes a no-op and should be treated as an invalid 
>>> configuration.
>>> The choice here is between:
>>> 
>>> #1 Log warning and move on
>>> #2 Throw an exception due to invalid configuration
>>> 
>>> My choice would be #2 again.
>> 
>> Is that really a good idea? As you guys said, @IndexedEmbedded becomes a 
>> (silently or not) broken mapping :(
>> It also means that the simplest @IE usage requires to understand depth and / 
>> or includePath.
>> I don’t like that at all. It makes things more complex than they should be 
>> for the simple case.
> 
> So what is your take on this then? Leave as is and keep the fact that the 
> default depth value changes its default value depending 
> on whether or not includePaths is used? That would be option
> 
> #3 Keep status quo for value of depth parameter
> 
> I raised the concern that the simple @IndexEmbedded is now not valid anymore 
> as well before. I guess the question is what you give more importance,
> ability to use the annotation with its default values or have consistent 
> default values which don’t change. 
> 
> I still think consistency is more important and #2 is the better approach. 
> However, before going to #1, I would rather join you and keep the status quo
> with #3.
> 
> Btw, enforcing a depth or includePath value might have the advantage of 
> creating smaller (more targeted) indexes, since we less likely include 
> fields which are need targeted by a query.

#3 then #2 for me. I really like #3 better though for the reason I explained.
We should bet at horse races together ;)
_______________________________________________
hibernate-dev mailing list
hibernate-dev@lists.jboss.org
https://lists.jboss.org/mailman/listinfo/hibernate-dev

Reply via email to