[hibernate-dev] [HSEARCH-566] Indexing null values for an @ElementCollection

Emmanuel Bernard emmanuel at hibernate.org
Mon Aug 1 06:48:31 EDT 2011


>> @Field(bridge=@FieldBridge(impl=CustomCollFB.class)
>> public Collection<String> getNames() { ... }
>> 
>>> I think this new bridge could be applied to the elements in this case,
>>> but be overridden by a custom bridge: so if someone was defining his
>>> own custom bridge it would still be applied instead.
>>> The point of the feature is that when mapping collections of
>>> primitives, people don't need to provide a custom bridge, and @Field
>>> is all what is needed to index the elements; of course this should not
>>> prevent more advanced mappings.
>> 
>> So you're saying that assuming you're OK with the default bridges, the elements of the collection will be indexed, but the minute you override the @FieldBridge, we default back to the existing behavior ie be a bridge accepting the collection.
>> Is that correct?
>> 
>> ## How about Date resolution?
> 
> TBH I didn't think about Date, that's clearly a special case as it
> selects a FieldBridge without actually using the @FieldBridge
> annotation.
> 
>> You would let people set a @Resolution and be applied to the elements?
> 
> +1, as in:
> 
> @Field
> @DateBridge(resolution=Resolution.DAY)
> private Set<Date> views;
> 
> I think it's quite clear what the user meant to do, don't you?

I personally find it confusing that we reuse the same @Field at the same place for a different target. But if people are of the opposite opinion, I can give up.

> 
>> ## How about NumericField?
>> 
>> Same as @Resolution?
> 
> yes, but simpler to implement as it's taken care of the LuceneOptions
> already (AFAIK, a test might proof me wrong).

The example would read

@Field
@NumericField(precisionStep=8)
private Set<Integer> views;

> 
>> 
>> ## Custom bridge for elements
>> 
>> If a user wants a custom bridge for the elements, he needs to write a custom bridge accepting the collection. Is that correct?
>> 
>> I'm trying to get a grasp on the limitations.
> 
> I think we don't have limitations, as people will still be able to use
> @FieldBridge to override anything, as was mandatory before adding this
> feature.
> 
> ## @ElementCollection on embeddable objects
> 
> should this work the same as @IndexedEmbedded, or should it throw an
> error inviting to use that one instead?

ahh, here is an idea

I would rewrite the examples above as 

@IndexedEmbedded
@DateBridge(resolution=Resolution.DAY)
private Set<Date> views;

@IndexedEmbedded
@NumericField(precisionStep=8)
private Set<Integer> views;

Of course this clashes in case people want both the proposed behavior and use a custom field bridge in parallel. But such feature is not supported by the currently proposed syntax either



More information about the hibernate-dev mailing list