簡體   English   中英

列表中的 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

我的數據庫 Story 和 Tag 中的兩個對象之間存在一對多關系。

我希望能夠獲取所有帶有標簽 object 和字符串名稱的 Story 對象。

故事.java

@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<Tag> tags;

    public Story(String title){
        this.title = title;
    }

    public Story(){

    }

// getters & setters

}

標簽.java

@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 & setters

}

StoryController.java

@RestController
public class StoryController {
    @Autowired
    StoryRepository storyRepository;

    @CrossOrigin(origins = "http://localhost:8080/api")
    @GetMapping(value = "/stories")
    public ResponseEntity<List<Story>> getAllStories(){
        return new ResponseEntity<>(storyRepository.findAll(), HttpStatus.OK);
    }

    @CrossOrigin(origins = "http://localhost:8080/api")
    @GetMapping(value="/stories/tagSearch/{name}")
    public ResponseEntity<Story> 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<Story> getStory(@PathVariable Long id) {
        return new ResponseEntity(storyRepository.findById(id), HttpStatus.OK);
    }

}

StoryRepository.java

@Repository
public interface StoryRepository extends JpaRepository<Story, Long> {

    public List<Story> findByTags_Name(String name);

}

嘗試通過瀏覽器查詢時,轉到地址 localhost:8080/api/stories/tagSearch/?name="tag" 數據庫返回數據庫中的所有對象,而不是我要查找的結果。

在您的存儲庫中執行此操作

@Query("SELECT s FROM Story s left join s.tags t WHERE t.name = ?1")
public List<Story> findByTags_Name(String name);

您需要在repository中使用以下方法。

public List<Story> findByTagsName(String name);

您需要使用以下 URL 來獲取詳細信息,因為您已將name定義為PathVariable

localhost:8080/api/stories/tagSearch/tag

標簽 - 是你的名字

暫無
暫無

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM