所有帮助/评论赞赏
我有一个@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。
非常感谢
Ĵ
答案 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