У меня есть отношение: Document2 ->* DocVersion
означает, что документ имеет несколько версий, чтобы быть понятным.
Теперь я хочу получить все DocVersion
s на основе уникального поля Document2
s.
Entities:
@Indexed
@Entity
public class DocVersion implements Serializable {
...
@Id
@Column(name = "version_id")
@GeneratedValue(strategy = GenerationType.SEQUENCE)
private long id;
...
@IndexedEmbedded
@ManyToOne(fetch = FetchType.EAGER, cascade = CascadeType.ALL)
@JoinColumn(name = "doc_uuid")
private Document2 document2;
@Field
private String versionVed;
private String versionOKM;
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
DocVersion version = (DocVersion) o;
return id == version.id &&
Objects.equals(versionVed, version.versionVed) &&
Objects.equals(versionOKM, version.versionOKM);
}
@Override
public int hashCode() {
return Objects.hash(id, versionVed, versionOKM);
}
}
@Indexed
@Entity
public class Document2 implements Serializable {
@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE)
@Column(name = "doc_uuid")
private long id;
@Field
@Analyzer(impl = WhitespaceAnalyzer.class)
@Column(name = "uuid")
private String UUID;
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
Document2 document2 = (Document2) o;
return Objects.equals(UUID, document2.UUID);
}
@Override
public int hashCode() {
return Objects.hash(UUID);
}
}
Вот как я строю запрос:
QueryBuilder b = fullTextEntityManager.getSearchFactory()
.buildQueryBuilder()
.forEntity(DocVersion.class)
.get();
BooleanQuery.Builder builder = new BooleanQuery.Builder();
builder.add(b.simpleQueryString().onField("document2.UUID").matching(val)
.createQuery(), MUST);
List<DocVersion> results = fullTextEntityManager.createFullTextQuery(builder.build(), DocVersion.class).getResultList();
и я получаю один результат.Я считаю эту ошибку, потому что у UUID документа, который я запрашиваю, есть больше (два) DocVersion
s.Конечно, БД возвращает две строки.Так почему я получаю только один с Lucene?Как это исправить?
hibernate-search: 5.9.3.Final