Hibernate:如何注释 Collection<Object> 以允许搜索
Hibernate: how to annotate Collection<Object> to allow search
假设我有一个像这样的模型 A:
@Embeddable
class A {
@Field
private String name;
@Field
private Boolean editable;
@IndexedEmbedded
private B bObject;
}
其中,B 是,比方说
@Embeddable
class B {
@Field
private int intValue;
@Field
private boolean boolValue;
}
现在,我有一个 class C,
@Entity
class C {
//How to annotate this to enable search like setOfA.name="searchQuery", or setOfA.bObject.intValue=5
@ElementCollection
private Set<A> setOfA;
}
我知道我可以创建自定义 Bridge,但无法弄清楚 Bridge 应该做什么,特别是为了启用 setOfA.bObject.intValue = 5 这样的搜索。
感谢任何帮助。谢谢
在集合对象上使用 @ContainedIn
,例如:
@ContainedIn
private Set<A> setOfA;
并在另一边使用 @IndexedEmbedded
,例如:
@Embeddable
class A {
@Field
private String name;
@Field
private Boolean editable;
@IndexedEmbedded
private B bObject;
@OneToOne( cascade = { CascadeType.PERSIST, CascadeType.REMOVE } )
@IndexedEmbedded
private C cObject;
}
您需要添加 @OneToMany
或 @ManyToMany
以便它是根据 JPA 的条款正确映射的关联。然后添加@IndexedEmbedded
以通过Hibernate Search启用全文搜索。
这是一个工作示例:
@ElementCollection
@Field(name="listStringField")
@FieldBridge(impl=BuiltinIterableBridge.class)//ListStringBridge.class)
public List<String> getListString(){
return listString;
}
- @Field(name...) 定义一个可搜索字段。
- @FieldBridge 允许搜索我的列表,但为此,您必须精确确定要使用的桥。这座桥将使该字段可索引。
- BuiltinIterableBridge,此桥原生存在于 Hibernate Search 的包中。您所要做的就是使用它!
- ListStringBridge。我创建的扩展 IterableBridge 的桥。你可以自己写。
假设我有一个像这样的模型 A:
@Embeddable
class A {
@Field
private String name;
@Field
private Boolean editable;
@IndexedEmbedded
private B bObject;
}
其中,B 是,比方说
@Embeddable
class B {
@Field
private int intValue;
@Field
private boolean boolValue;
}
现在,我有一个 class C,
@Entity
class C {
//How to annotate this to enable search like setOfA.name="searchQuery", or setOfA.bObject.intValue=5
@ElementCollection
private Set<A> setOfA;
}
我知道我可以创建自定义 Bridge,但无法弄清楚 Bridge 应该做什么,特别是为了启用 setOfA.bObject.intValue = 5 这样的搜索。
感谢任何帮助。谢谢
在集合对象上使用 @ContainedIn
,例如:
@ContainedIn
private Set<A> setOfA;
并在另一边使用 @IndexedEmbedded
,例如:
@Embeddable
class A {
@Field
private String name;
@Field
private Boolean editable;
@IndexedEmbedded
private B bObject;
@OneToOne( cascade = { CascadeType.PERSIST, CascadeType.REMOVE } )
@IndexedEmbedded
private C cObject;
}
您需要添加 @OneToMany
或 @ManyToMany
以便它是根据 JPA 的条款正确映射的关联。然后添加@IndexedEmbedded
以通过Hibernate Search启用全文搜索。
这是一个工作示例:
@ElementCollection
@Field(name="listStringField")
@FieldBridge(impl=BuiltinIterableBridge.class)//ListStringBridge.class)
public List<String> getListString(){
return listString;
}
- @Field(name...) 定义一个可搜索字段。
- @FieldBridge 允许搜索我的列表,但为此,您必须精确确定要使用的桥。这座桥将使该字段可索引。
- BuiltinIterableBridge,此桥原生存在于 Hibernate Search 的包中。您所要做的就是使用它!
- ListStringBridge。我创建的扩展 IterableBridge 的桥。你可以自己写。