[hibernate-issues] [Hibernate-JIRA] Commented: (HSEARCH-682) DSL cannot handle fieldBridge for @IndexEmbedded fields

Davide D'Alto (JIRA) noreply at atlassian.com
Mon Feb 6 05:24:13 EST 2012


    [ https://hibernate.onjira.com/browse/HSEARCH-682?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=45370#comment-45370 ] 

Davide D'Alto commented on HSEARCH-682:
---------------------------------------

Hi,
Maybe it's a bit late but I think there are some errors in the test:
1) getAnnotatedClasses() should returned both entities not only  the parent (this should solve the mapping exception).
2) ParenteEntity#embeddedEntity should be annotated with @OneToOne or @ManyToOne. I don't think @IndexEmbedded alone is enough.
3) You should remove the @Field(name = "embedded") and use instead @IndexEmbedded(prefix = "embedded.", depth = 1)

Everything should work if you apply this changes (at least with the latest hibernate version).

I Hope I didn't miss anything,
Cheers.


> DSL cannot handle fieldBridge for @IndexEmbedded fields
> -------------------------------------------------------
>
>                 Key: HSEARCH-682
>                 URL: https://hibernate.onjira.com/browse/HSEARCH-682
>             Project: Hibernate Search
>          Issue Type: New Feature
>          Components: query
>    Affects Versions: 3.3.0.Final
>         Environment: Hibernate 3.6.0, HSearch 3.3.0, Mysql 5.1.52.
>            Reporter: Nick Fenwick
>         Attachments: HSEARCH-682-unittest1.tgz
>
>
> Discussed in https://forum.hibernate.org/viewtopic.php?f=9&t=1009440, "Re: Correct to use ignoreFieldBridge for "subentity.field" DSL?".
> I find I have to set ignoreFieldBridge when querying for a field indexed using @IndexEmbedded, i.e.:
> {code}@Entity
> class CategoryEntity {
>    @Column(name="lft")
>    @Field(name="left", index=Index.UN_TOKENIZED, store=Store.YES)
>    @FieldBridge(impl=PadNumberBridge.class,
>          params = { @Parameter(name="pad", value="4") }
>    )
>    private int left;
>    ... same for 'right' ...
> }
> @Entity
> class ItemEntity {
>    @IndexedEmbedded(depth=1)
>    private CategoryEntity category;
> }{code}
> results in fields for ItemEntity being stored in the Lucene index like:
> {code}
> category.left = 0004
> category.right = 0012
> {code}
> To query for these, I cannot do:
> {code}
> qb.range().onField("category.left").above(4).createQuery()
> {code}
> I get an exception saying it doesn't know what FieldBridge to use for "category.left".  Instead, I can do:
> {code}
> qb.range().onField("category.left").ignoreFieldBridge().above(4).createQuery()
> {code}
> but the 'value' is no longer padded according to the FieldBridge that was specified in CategoryEntity for its 'left' attribute, I have to pass value as e.g. "0004".
> It would be good to mention this situation in the documentation (5.1.2. "Building a Lucene query with the Hibernate Search query DSL"), at least to specify that it is/isn't supported, so that people attempting this kind of @IndexEmbedded mapping know how to safely build a query for such fields.

--
This message is automatically generated by JIRA.
For more information on JIRA, see: http://www.atlassian.com/software/jira

        


More information about the hibernate-issues mailing list