javascript
Spring Data Solr教程:将自定义方法添加到单个存储库
我的Spring Data Solr教程的前一部分教我們如何使用查詢方法創建靜態查詢。 自然而然的下一步將是描述如何使用Spring Data Solr創建動態查詢。 但是,在繼續討論該主題之前,我們必須了解如何將自定義方法添加到單個存儲庫。 這篇博客文章將幫助我們了解如何完成。 在此博客條目期間,我們將修改示例應用程序 ,以使用稱為部分更新的技術將todo條目的信息更新為Solr索引。 讓我們從仔細研究Solr的部分更新功能開始。
注意:這些博客條目提供了其他信息,有助于我們理解此博客條目中描述的概念:
- 使用Maven運行Solr
- Spring Data Solr教程:Solr簡介
- Spring Data Solr教程:配置
- Spring Data Solr教程CRUD(幾乎)
什么是部分更新?
Solr 4.0中引入了部分更新功能,它使我們可以選擇要更新的字段。 如果索引整個文檔的內容很慢,這將非常有用。
但是,部分更新功能有其局限性。 如果要使用部分更新功能,則必須存儲文檔的所有字段,這會增加Solr索引的大小。 這樣做的原因是不可能對Lucene索引進行部分更新。 Lucene總是在索引新文檔之前刪除舊文檔。 這意味著,如果不存儲未更新的字段,則在對文檔進行部分更新時,這些字段的值會丟失。
決定哪個對我們更重要是我們的工作:速度或索引的大小。
通過查看以下資源,我們可以獲得有關部分更新的更多信息:
- Solr 4.0:部分文檔更新
- Solr –文檔的部分更新@ StackOverflow
- Solr –將新字段更新為現有文檔@ StackOverflow
讓我們繼續學習如何將自定義方法添加到單個Spring Data Solr存儲庫中。
將自定義方法添加到單個存儲庫
我們可以按照以下步驟將自定義方法添加到單個存儲庫中:
在以下小節中將更詳細地描述這些步驟。
創建自定義界面
首先,我們必須創建一個接口并在其中聲明自定義方法。 我們可以按照以下步驟進行操作:
因為我們只需要聲明一個用于更新待辦事項信息的自定義方法,所以PartialUpdateRepository接口的源代碼如下所示:
public interface PartialUpdateRepository {public void update(Todo todoEntry); }實施自定義界面
其次,我們必須實現PartialUpdateRepository接口。 存儲庫基礎結構嘗試使用以下規則自動檢測實現自定義存儲庫接口的類:
- 必須從與定制接口相同的包中找到定制存儲庫接口的實現。
- 必須使用以下公式來創建實現自定義存儲庫接口的類的名稱 : [實際存儲庫接口的名稱] [存儲庫實現后綴] 。
存儲庫實現后綴的默認值為“ Impl”。 我們可以使用以下方法之一覆蓋默認值:
- 如果使用Java配置,則可以通過將首選后綴設置為@EnableSolrRepositories批注的repositoryImplementationPostfix屬性的值來配置使用的后綴。
- 如果使用XML配置,則可以通過將首選postfix設置為repository名稱空間元素的repository-impl-postfix屬性的值來配置使用的postfix。
此博客條目的示例應用程序使用默認配置。 因此,我們可以按照以下步驟實現PartialUpdateRepository接口:
讓我們仔細看看update()方法的實現。 我們可以通過執行以下步驟來實現此方法:
TodoRepositoryImpl類的源代碼如下所示:
import org.springframework.data.solr.core.SolrTemplate; import org.springframework.data.solr.core.query.PartialUpdate; import org.springframework.stereotype.Repository;import javax.annotation.Resource;@Repository public class TodoDocumentRepositoryImpl implements PartialUpdateRepository {@Resourceprivate SolrTemplate solrTemplate;@Overridepublic void update(Todo todoEntry) {PartialUpdate update = new PartialUpdate("id", todoEntry.getId().toString());update.add("description", todoEntry.getDescription());update.add("title", todoEntry.getTitle());solrTemplate.saveBean(update);solrTemplate.commit();} }修改存儲庫界面
通過擴展PartialUpdateRepository接口,我們可以使自定義update()方法對存儲庫的用戶可見。 TodoDocumentRepository接口的源代碼如下所示:
import org.springframework.data.solr.repository.SolrCrudRepository;public interface TodoDocumentRepository extends PartialUpdateRepository, SolrCrudRepository<TodoDocument, String> {//Query methods are omitted. }讓我們繼續前進,了解如何使用我們的新存儲庫方法。
使用自定義方法
我們可以通過對示例應用程序進行以下更改來使用自定義update()方法:
在以下小節中將更詳細地描述這些步驟。
向TodoIndexService接口添加新方法
我們記得, TodoIndexRepository接口聲明了一些方法,這些方法用于向Solr索引添加信息,從Solr索引中搜索信息并從索引中刪除文檔。
我們必須向該接口添加新方法。 此方法稱為update() ,它將更新的Todo對象作為方法參數。 TodoIndexRepository接口的源代碼如下所示:
public interface TodoIndexService {//Other methods are omitted.public void update(Todo todoEntry); }實施添加的方法
通過執行以下步驟,我們可以實現TodoIndexService接口的update()方法:
RepositoryTodoIndexService類的源代碼如下所示:
import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional;import javax.annotation.Resource;@Service public class RepositoryTodoIndexService implements TodoIndexService {@Resourceprivate TodoDocumentRepository repository;//Other fields and methods are omitted.@Transactional@Overridepublic void update(Todo todoEntry) {repository.update(todoEntry);} }修改RepositoryTodoService類
我們的最后一步是修改RepositoryTodoService類的update()方法,以使用在TodoIndexService接口中聲明的新update()方法。 RepositoryTodoService類的相關部分如下所示:
import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional;import javax.annotation.Resource;@Service public class RepositoryTodoService implements TodoService {@Resourceprivate TodoIndexService indexService;@Resourceprivate TodoRepository repository;//Other methods are omitted.@PreAuthorize("hasPermission('Todo', 'update')")@Transactional(rollbackFor = {TodoNotFoundException.class})@Overridepublic Todo update(TodoDTO updated) throws TodoNotFoundException {Todo model = findById(updated.getId());model.update(updated.getDescription(), updated.getTitle());indexService.update(model);return model;} }摘要
現在,我們已經向單個Spring Data Solr存儲庫添加了一個自定義方法,并實現了使用Solr的部分更新功能的更新功能。 本教程教了我們兩件事:
- 我們知道如何將自定義方法添加到單個Spring Data Solr存儲庫。
- 我們知道,只有存儲了文檔的所有字段( 存儲屬性的值為true),我們才可以使用部分更新。
我的Spring Data Solr教程的下一部分描述了如何利用從該博客文章中學到的技能來使用Spring Data Solr創建動態查詢 。
PS此博客條目的示例應用程序可從Github獲得 。
翻譯自: https://www.javacodegeeks.com/2013/05/spring-data-solr-tutorial-adding-custom-methods-to-a-single-repository.html
總結
以上是生活随笔為你收集整理的Spring Data Solr教程:将自定义方法添加到单个存储库的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: DDOS 全球灵魂(ddos 全球)
- 下一篇: 基于Spring的应用程序-迁移到Jun