0
package example;
...

@Entity
@Indexed
public class Book {

@Id
@GeneratedValue
private Integer id;

@Field(index=Index.YES, analyze=Analyze.YES, store=Store.NO)
private String title;

@Field(index=Index.YES, analyze=Analyze.YES, store=Store.NO)
private String subtitle; 
@Field(index = Index.YES, analyze=Analyze.NO, store = Store.YES)
@DateBridge(resolution = Resolution.DAY)
private Date publicationDate;

@IndexedEmbedded
@ManyToMany 
private Set<Author> authors = new HashSet<Author>();

@OneToMany(mappedBy="book")
List<BookPages> bookPages;

}

1)如果搜索结果是 Book.class 类型,结果是否包含 @ManyToOne 对象(bookPages),还是我必须单独加载它们?因为我需要它们来显示结果。

2) 是否可以在搜索中添加原生 sql 子句?因为我需要限制结果,为此我必须加入另一个未在 Book.class 中声明的表。

4

2 回答 2

1
  1. 这是一个基本的 Hibernate ORM 问题,与 Hibernate Search 无关。是的,您始终可以通过调用 getter / 访问字段来从一个实体导航到它的关系:根据您的(可配置的)获取策略,它会在加载主实体时“一次性”预加载关系(可能带有JOIN)或按需透明地获取它。但是,此配置对功能没有任何影响,更多的是性能调整选项。
  2. 不,您不能将 SQL 与 Hibernate Search(全文)查询混合使用;您可以做的是从映射中的另一个表中公开所需的数据 - 无论如何这将是一个更清晰的映射 - 然后使用 Hibernate Search 注释来确保您需要的所有字段也被索引,以便您可以包含直接在 FullTextQuery 中的限制;fill 的执行速度比任何 SQL 都要快得多。
于 2012-10-14T10:18:44.070 回答
0

无法将本机 SQL 与休眠搜索查询混合使用,因为如果不迭代至少一个结果,就无法将两个查询的结果相交。

请参阅有关此确切问题的文档参考。 Hibernate Search - FAQ - 我可以混合使用 HQL 和 Lucene 查询吗? http://hibernate.org/search/faq/

于 2014-12-05T16:34:37.177 回答