[英]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.