0

所有帮助/评论表示赞赏

我有一个@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。

非常感谢

Ĵ

4

1 回答 1

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;
    }
    .......

更多信息请看这里

于 2014-06-24T11:51:42.680 回答