簡體   English   中英

Spring JPA findBy存儲庫中如何忽略重音符號?

[英]How to ignore accents in Spring JPA findBy repository?

可以說我們有這個存儲庫:

public interface DeviceTypeRepository extends CrudRepository<DeviceType, Integer>, JpaSpecificationExecutor<DeviceType> {    
    public Iterable<DeviceType> findByNameContaining(String name);    
}

如何通過忽略用戶在搜索過濾器中輸入錯誤的重音來獲得相同的結果?

示例: João | Joao | JOÃO João | Joao | JOÃO João | Joao | JOÃOMarcio | Márcio Marcio | Márcio

Spring的內置功能無法做到這一點。 您可以考慮使用Elastic Search做到這一點,關於此主題的文章You Have a Accent

另一種方法是在執行SQL請求之前不將重音字母存儲在數據庫中並執行映射,或者使用自定義SQL函數在數據庫端執行映射-但這是一個麻煩且脆弱的解決方案。

列表中的 findBy 屬性<object> SpringBoot JPA 存儲庫<div id="text_translate"><p>我的數據庫 Story 和 Tag 中的兩個對象之間存在一對多關系。</p><p> 我希望能夠獲取所有帶有標簽 object 和字符串名稱的 Story 對象。</p><p> 故事.java</p><pre> @Entity @Table(name = "stories") public class Story { @Id @GeneratedValue private Long id; @Column(name = "title") private String title; @JsonIgnoreProperties({"story"}) @OneToMany(mappedBy = "story", fetch = FetchType.LAZY) private List&lt;Tag&gt; tags; public Story(String title){ this.title = title; } public Story(){ } // getters &amp; setters }</pre><p> 標簽.java</p><pre> @Entity @Table(name = "tags") public class Tag { @Id @GeneratedValue private Long id; @Column(name = "name") private String name; @JsonIgnoreProperties({"tags"}) @ManyToOne @JoinColumn(name = "story_id", nullable = false) @Cascade(org.hibernate.annotations.CascadeType.SAVE_UPDATE) private Story story; public Tag(String name, Story story){ this.name = name; this.story = story; } public Tag(){ } /// getters &amp; setters }</pre><p> StoryController.java</p><pre> @RestController public class StoryController { @Autowired StoryRepository storyRepository; @CrossOrigin(origins = "http://localhost:8080/api") @GetMapping(value = "/stories") public ResponseEntity&lt;List&lt;Story&gt;&gt; getAllStories(){ return new ResponseEntity&lt;&gt;(storyRepository.findAll(), HttpStatus.OK); } @CrossOrigin(origins = "http://localhost:8080/api") @GetMapping(value="/stories/tagSearch/{name}") public ResponseEntity&lt;Story&gt; getStoryByTag(@PathVariable String name) { return new ResponseEntity(storyRepository.findByTags_Name(name), HttpStatus.OK); } @CrossOrigin(origins = "http://localhost:8080/api") @GetMapping(value="/stories/{id}") public ResponseEntity&lt;Story&gt; getStory(@PathVariable Long id) { return new ResponseEntity(storyRepository.findById(id), HttpStatus.OK); } }</pre><p> StoryRepository.java</p><pre> @Repository public interface StoryRepository extends JpaRepository&lt;Story, Long&gt; { public List&lt;Story&gt; findByTags_Name(String name); }</pre><p> 嘗試通過瀏覽器查詢時,轉到地址 localhost:8080/api/stories/tagSearch/?name="tag" 數據庫返回數據庫中的所有對象,而不是我要查找的結果。</p></div></object>

[英]findBy property in List<Object> SpringBoot JPA Repository

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

相關問題 Spring 引導應用程序中的 Jpa 存儲庫按問題查找 Spring Data JPA/Boot: findBy ... 或 Spring 存儲庫 findBy 連接表 如何在 spring 引導中由 @OneToMany 注釋映射的列上使用 JPA findBy 如何在Spring Boot中使存儲庫findBy()具有多個字段? Spring 數據 jpa 存儲庫查找通過返回 null 即使數據庫中存在數據 Spring 數據 Redis。 JPA 存儲庫 findBy 有時無法獲取現有記錄 列表中的 findBy 屬性<object> SpringBoot JPA 存儲庫<div id="text_translate"><p>我的數據庫 Story 和 Tag 中的兩個對象之間存在一對多關系。</p><p> 我希望能夠獲取所有帶有標簽 object 和字符串名稱的 Story 對象。</p><p> 故事.java</p><pre> @Entity @Table(name = "stories") public class Story { @Id @GeneratedValue private Long id; @Column(name = "title") private String title; @JsonIgnoreProperties({"story"}) @OneToMany(mappedBy = "story", fetch = FetchType.LAZY) private List&lt;Tag&gt; tags; public Story(String title){ this.title = title; } public Story(){ } // getters &amp; setters }</pre><p> 標簽.java</p><pre> @Entity @Table(name = "tags") public class Tag { @Id @GeneratedValue private Long id; @Column(name = "name") private String name; @JsonIgnoreProperties({"tags"}) @ManyToOne @JoinColumn(name = "story_id", nullable = false) @Cascade(org.hibernate.annotations.CascadeType.SAVE_UPDATE) private Story story; public Tag(String name, Story story){ this.name = name; this.story = story; } public Tag(){ } /// getters &amp; setters }</pre><p> StoryController.java</p><pre> @RestController public class StoryController { @Autowired StoryRepository storyRepository; @CrossOrigin(origins = "http://localhost:8080/api") @GetMapping(value = "/stories") public ResponseEntity&lt;List&lt;Story&gt;&gt; getAllStories(){ return new ResponseEntity&lt;&gt;(storyRepository.findAll(), HttpStatus.OK); } @CrossOrigin(origins = "http://localhost:8080/api") @GetMapping(value="/stories/tagSearch/{name}") public ResponseEntity&lt;Story&gt; getStoryByTag(@PathVariable String name) { return new ResponseEntity(storyRepository.findByTags_Name(name), HttpStatus.OK); } @CrossOrigin(origins = "http://localhost:8080/api") @GetMapping(value="/stories/{id}") public ResponseEntity&lt;Story&gt; getStory(@PathVariable Long id) { return new ResponseEntity(storyRepository.findById(id), HttpStatus.OK); } }</pre><p> StoryRepository.java</p><pre> @Repository public interface StoryRepository extends JpaRepository&lt;Story, Long&gt; { public List&lt;Story&gt; findByTags_Name(String name); }</pre><p> 嘗試通過瀏覽器查詢時,轉到地址 localhost:8080/api/stories/tagSearch/?name="tag" 數據庫返回數據庫中的所有對象,而不是我要查找的結果。</p></div></object> JPA 將存儲庫 findBy 與實體對象一起使用 在 JPA 中使用 findBy 時如何忽略某些列
 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM