피드 테이블에 가입하고 source_id 필드에서 필터링하여 모든 기사 레코드를 가져 오려고합니다.spring jpa onetomany relationship @Query not working
내 저장소 :
package com.infostream.repositories;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.PagingAndSortingRepository;
import com.infostream.models.Article;
import java.lang.String;
public interface ArticleRepositoryImpl extends PagingAndSortingRepository<Article, Long> {
Page<Article> findAll(Pageable pageRequest);
Page<Article> findByFeedId(String feedId, Pageable pageable);
@Query("select a from Article a join Feed f where f.source_id = ?1");
Page<Article> findBySourceId(String sourceId, Pageable pageable);
}
공급 모델 :
package com.infostream.models;
import java.util.Date;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Table;
import javax.validation.constraints.NotNull;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import com.infostream.serializers.JsonDateSerializer;
@Entity
@Table(name="feeds")
public class Feed extends Base {
@Column(name = "source_id", nullable = false)
private String sourceId;
@Column(name = "category_id", nullable = false)
private String categoryId;
@NotNull
@Column(columnDefinition="text")
private String url;
@Column(name = "last_visited")
private Date lastVisited;
public Feed() {
}
public Feed(String sourceId, String categoryId, String url) {
this.sourceId = sourceId;
this.categoryId = categoryId;
this.url = url;
}
@JsonSerialize(using = JsonDateSerializer.class)
public Date getLastVisited() {
return lastVisited;
}
public void setLastVisited(Date lastVisited) {
this.lastVisited = lastVisited;
}
public String getSourceId() {
return sourceId;
}
public void setSourceId(String sourceId) {
this.sourceId = sourceId;
}
public String getCategoryId() {
return categoryId;
}
public void setCategoryId(String categoryId) {
this.categoryId = categoryId;
}
public String getUrl() {
return url;
}
public void setUrl(String url) {
this.url = url;
}
}
문서 모델 :
package com.infostream.models;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Table;
import javax.validation.constraints.NotNull;
@Entity
@Table(name = "articles")
public class Article extends Base {
public Article() {
}
public Article(String feedId, String title, String description, String url) {
this.feedId = feedId;
this.title = title;
this.description = description;
this.url = url;
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
public String getDescription() {
return description;
}
public void setDescription(String description) {
this.description = description;
}
public String getUrl() {
return url;
}
public void setUrl(String url) {
this.url = url;
}
public String getImgUrl() {
return imgUrl;
}
public void setImgUrl(String imgUrl) {
this.imgUrl = imgUrl;
}
public String getFeedId() {
return feedId;
}
public void setFeedId(String feedId) {
this.feedId = feedId;
}
@Column(name = "feed_id", nullable = false)
private String feedId;
@NotNull
@Column(columnDefinition="text")
private String title;
@Column(name = "img_url", columnDefinition="text")
private String imgUrl;
@Column(columnDefinition="text")
private String description;
@NotNull
@Column(columnDefinition="text")
private String url;
@Override
public String toString() {
return "Article [feedId=" + feedId + ", title=" + title + ", imgUrl=" + imgUrl + ", description=" + description
+ ", url=" + url + "]";
}
}
오류 난 점점 오전 :
Caused by: org.hibernate.hql.internal.ast.QuerySyntaxException: Path expected for join! [select a from com.infostream.models.Article a join Feed f where f.source_id = ?1]
OneToMany 매핑 오류가 발생하기 전에 동일한 오류가 발생했습니다. 아무도 좋은 예가 표시되어 있습니까? feed_id를 필터링하려고하지 않습니다. 피드 테이블의 필드 인 source_id에서 필터링 중입니다.
기본적으로 무엇을 달성하려고하는 것은 봄에이 원시 SQL 쿼리는 단순히 추상적이고, 일을 가지 방법으로 최대 절전 모드 : 그것은 내가 우아한 방법으로 내 문제를 해결 한 나타납니다 주위에 약간의 땜질 후
select a.* from articles as a join feeds as f on(a.feed_id = f.id) where f.source_id = 'some_source_id';