【发布时间】:2014-05-05 07:48:42
【问题描述】:
我在使用 Hibernate Search 的应用程序中遇到了问题。
我们有一个类 A,我们在其中对 A 类和 B 类中的字段进行 hsearch,并且还针对 A 中声明的类地址进行空间搜索。 一切正常。
现在我们还必须以相反的方式实现搜索,我们要在 B 类中搜索 B、A 中包含的字段,并针对 A.Address 进行空间搜索。现在我们有一个问题。自从
B 将 A 声明为 @ContainedIn,A 的字段无法从 B 中搜索。
如果我们将@ContainedIn 更改为@IndexEmbedded,我们会得到循环依赖,因为你不能在两边都有@IndexEmbedded。
然后我读到你可以限制@IndexEmbedded 的深度,所以我试了一下。我知道我们不会搜索比 A.?.?.? 更深的地方。在 B 所以我将@ContainedIn 更改为
@IndexEmbedded(depth = 4) B 类 A 类。
现在当我启动我的应用程序时,我收到以下错误:
org.hibernate.search.SearchException:HSEARCH000158:类地址 不能有两个使用默认/相同名称的@Spatial
有没有人知道如何解决这个问题? 我们使用 Hibernate Search 版本 4.5.0.Final 请参阅以下课程。 问候 安德烈亚斯
@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;
.....
}
【问题讨论】:
-
我解决了这个问题。通过在 A 类中使用 includePaths 并仅命名我感兴趣的字段,我摆脱了导致问题的循环依赖。
标签: hibernate hibernate-search