我目前正在开发一个涉及使用Hibernate Search的项目。目前该项目使用纯SQL进行搜索,我们希望使用文本搜索(需要知道并正确拼写第一个单词可能会令人讨厌)。
架构是产品可以有多个版本,当前版本包含产品的名称。
Public Class Product extends ProgEntity
{
private List<ProductVersion> versions = new ArrayList<ProductVersion>();
...
}
Public Class ProductVersion extends ProgEntity
{
String productName;
...
}
我需要能够根据其名称搜索产品。我能够通过productName索引ProductVersions而没有什么问题,但索引产品被证明是一个更大的问题。
经过一番研究后,这就是我所拥有的,但是当我将产品更新到数据库时,没有创建索引。
@Entity
@Indexed
Public Class Product extends ProgEntity
{
@IndexedEmbedded
private List<ProductVersion> versions = new ArrayList<ProductVersion>();
...
}
@Entity
@Embeddable
Public Class ProductVersion extends ProgEntity
{
@Field
String productName;
...
}
DocumentID是ProgEntity的一部分。我需要确保,如果我更新产品或产品版本,它将被正确索引,现在似乎没有发生。
有关我的错误行为的任何建议吗?
答案 0 :(得分:1)
您发布的代码中映射的Product和ProductVersion之间没有关系(例如,多对一,多对一)。这种关系必须是双向的。使用@IndexedEmbedded注释Product的集合字段,使用@ContainedIn注释ProductVersion一侧的反向字段,您应该全部设置。
答案 1 :(得分:0)
在 ProductVersion 上使用 @Entity 和 @Embeddable 似乎是错误的。还有一些JPA注释缺失。 版本集合是否映射为 @ManyToOne 或 @ElementCollection 。 你检查过你的hibernate配置和日志文件了吗?您使用的是哪个目录提供商?