2017-06-16 149 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