我在使用Hibernate Search的应用程序中遇到了一个问题。
我们有一个类,A我们对A类和B类中的字段进行搜索,还有空间搜索agaist类在A中声明的地址。 一切都很好。
现在我们必须以相反的方式实现搜索,我们想要在B类中搜索B,A中包含的字段和针对A.Address的空间搜索。现在我们遇到了问题。以来
B的A声明为@ContainedIn
,A的字段不能从B中搜索到。
如果我们将@ContainedIn
更改为@IndexEmbedded
,我们就会获得循环依赖,因为您不能在@IndexEmbedded
双方都拥有@IndexEmbedded
。
然后我读到你可以限制@ContainedIn
的深度,所以我尝试了。我知道我们不会比A更深入地搜索。?。?。?在B中,我将@IndexEmbedded(depth = 4)
更改为
B级的A级@Entity
@Indexed
@FullTextFilterDefs({
@FullTextFilterDef(name = "externalSearchFilterFactory", impl = ExternalSearchFilterFactory.class),
@FullTextFilterDef(name = "internalSearchFilterFactory", impl = InternalSearchFilterFactory.class)
})
@DynamicUpdate(value = true)
@Table(name = "A")
public class A extends DomainObjekt {
.....
@IndexedEmbedded
@ManyToOne(fetch = FetchType.LAZY, cascade = CascadeType.MERGE, optional = false)
@JoinColumn(name = "B_ID", referencedColumnName = "B_ID", nullable = false)
private B b;
@IndexedEmbedded
@ManyToOne(fetch = FetchType.LAZY, cascade = CascadeType.MERGE, optional = false)
@JoinColumn(name = "ADDRESS_ID", referencedColumnName = "ADDRESS_ID", nullable = false)
private Address adress;
.....
}
@Entity
@Indexed
@DynamicUpdate(value = true)
@Table(name = "B")
public class B extends DomainObjekt {
.....
@ContainedIn
@OneToMany(mappedBy = "b", fetch = FetchType.LAZY, cascade = CascadeType.REFRESH)
private Set<A> listOfA = new HashSet<A>();
.....
}
@Spatial(name = "location", spatialMode = SpatialMode.RANGE)
@Indexed
@Entity
@DynamicUpdate(value = true)
@Table(name = "ADDRESS")
@SuppressWarnings({"serial"})
public class Address extends DomainObjekt {
.....
@Latitude(of = "location")
@Column(name = "LATITUDE")
private Double latitude;
@Longitude(of = "location")
@Column(name = "LONGITUDE")
private Double longitude;
.....
}
。
现在,当我启动应用程序时,出现以下错误:
org.hibernate.search.SearchException:HSEARCH000158:类地址 不能使用默认/同名的两个@Spatial
有没有人知道如何解决这个问题? 我们使用Hibernate Search版本4.5.0.Final 请看下面的课程。 问候 安德烈亚斯
{{1}}
答案 0 :(得分:0)
@Spatial 注释采用名称属性。 如果要在同一实体中包含多个空间字段,则应使用此属性,以便在执行查询时可以指向特定的空间字段。