[hibernate-dev] [Search] Index embedded and id property of embedded entity
Emmanuel Bernard
emmanuel at hibernate.org
Tue May 27 06:01:12 EDT 2014
On 06 May 2014, at 21:43, Hardy Ferentschik <hardy at 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.
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.
>
> I think I favour #2 atm, since it seems more symmetric.
>
> 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.
Emmanuel
More information about the hibernate-dev
mailing list