Hibernate-search OneToMany无限索引

时间:2013-08-23 17:32:41

标签: hibernate hibernate-search

所有帮助/评论赞赏

我有一个@OneToMany关系。 TVenue和TVenueItem 我想能够搜索Venue上的各个字段,所以我用@Indexed标记了它。 我的设置如下:

@Indexed
@Entity
public class TVenue  implements java.io.Serializable {

    private Set<TVenueItem> TVenueItems = new HashSet<TVenueItem>(0);

    .......
    @OneToMany(cascade=CascadeType.ALL, fetch=FetchType.LAZY, mappedBy="TVenue")
    public Set<TVenueItem> getTVenueItems() {
        return this.TVenueItems;
    }
    ...........

@Entity
public class TVenueItem  implements java.io.Serializable {

    private String name;
    private TVenue TVenue;

    ...........
    @ManyToOne(fetch=FetchType.LAZY)
    @JoinColumn(name="venue_id", nullable=false)
    public TVenue getTVenue() {
        return this.TVenue;
    }

    @Field
    @Column(name="_name", nullable=false, length=100)
    public String getName() {
        return this.name;
    }
    .......

到目前为止没有问题。

现在,完全独立我想搜索TVenueItem的字段,所以我也将其标记为@Indexed。

问题:只要我将@Indexed添加到TVenueItem,(手动)索引就会永远挂起,大概是因为或无限递归。

任何人都知道如何避免这个问题? 我知道TVenue是拥有实体,TVenueItem上的操作可以从TVenue完成。 但是,无论如何,我都希望能够独立搜索TVenueItem。

非常感谢

Ĵ

1 个答案:

答案 0 :(得分:0)

我找到了一些解决方案。尝试使用这样的东西:

@Indexed
@Entity
public class TVenue  implements java.io.Serializable {

    private Set<TVenueItem> TVenueItems = new HashSet<TVenueItem>(0);

    .......
    @OneToMany(cascade=CascadeType.ALL, fetch=FetchType.LAZY, mappedBy="TVenue")
    @IndexedEmbedded(prefix = "tvenue.item")
    public Set<TVenueItem> getTVenueItems() {
        return this.TVenueItems;
    }
    ...........

@Entity
public class TVenueItem  implements java.io.Serializable {

    private String name;
    private TVenue TVenue;

    ...........
    @ManyToOne(fetch=FetchType.LAZY)
    @JoinColumn(name="venue_id", nullable=false)
    @ContainedIn
    public TVenue getTVenue() {
        return this.TVenue;
    }

    @Field
    @Column(name="_name", nullable=false, length=100)
    public String getName() {
        return this.name;
    }
    .......

了解更多信息look here