2017-06-16 107 views
0

FullTextQuery.setProjection(“id”,“author”)忽略了作者的id,name属性。我如何检索这些属性?如何检索@IndexedEmbedded属性?

@MappedSuperclass 
class BaseContent{ 
    @IndexedEmbedded(prefix = "author.", includePaths = {"id", "name"}) @ManyToOne 
    Author author; 
} 
@Entity @Indexed 
class Content extends BaseContent{ 
    @Id @DocumentId 
    Integer id; 
} 
@Entity 
class Author{ 
    @Id 
    Integer id; 
    @Field(store = Store.YES) 
    String name; 
} 

编辑: 这是正确的查询?

FullTextQuery ftq = fullTextSession.createFullTextQuery(luceneQuery, Content.class); 

    ftq.setProjection("id", "author.id", "author.name"); 
    ftq.setResultTransformer(new AliasToBeanResultTransformer(Content.class)); 

    List<Content> result = ftq.list(); 

回答

0

使用前缀author.

fullTextQuery.setProjection("author.id", "author.name") 

编辑:你尝试检查结果没有你的变压器?它应该返回List<Object[]>与预测的内容。如果是这样,那么这是变压器不起作用。我非常怀疑AliasToBeanResultTransformer能够处理复合别名​​,例如“author.name”。你可能需要你自己的变压器。

还要注意的是:

  • 如果你只是想要得到的内容实体,并得到它从数据库中不打扰你,只是删除了投影和结果变压器:Hibernate Search的会得到一个List<Content>从你的数据库。
  • 如果你想要做的是避免从数据库中加载任何东西,那么你在正确的道路上。但正如我所说,你可能需要一个定制变压器。
+0

默认前缀正确存储。正确搜索。但为什么不能检索它? – hurelhuyag

+0

@hurelhuyag您的示例在调用'setProjection'时不使用前缀...您能否为我们提供用于搜索的确切代码,从构建完整查询到调用结果查询中的“list()”? –

+0

我编辑的问题。 – hurelhuyag