У меня есть 2 сущности - Тема и Запись . Тема имеет много сообщений с.
У каждого объекта есть хранилище, и для каждого из них работает базовая функциональность CRUD.
Моя проблема: Я не могу найти способ получить нумерованную коллекцию из сообщений , связанных с определенной темой .
Конечно, я могу получить Thread по идентификатору, и он также появляется в сообщениях ... но это не подходит моему сценарию использования. Например, если в теме было 60 сообщений, я должен иметь возможность разбивать результаты на страницы. Это заставляет меня чувствовать, что мне следует напрямую звонить в PostRepository и запрашивать только сообщения с определенным идентификатором темы.
Это привело меня к следующему методу запроса в моем PostRepository:
@Query("SELECT p FROM Post p " +
"JOIN Thread AS t " +
"ON p.thread.id = t.id " +
"WHERE t.id = :threadId")
Page<Post> findPostsByThreadId(@Param("threadId") long threadId, Pageable pageable);
К сожалению, это ничего не возвращает. (Стоит отметить, что сообщения были были сохранены - я просто не могу запросить их таким образом).
Ниже я покажу основное представление моих сущностей:
@Entity
@Table(name = "thread")
public class Thread {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "id")
private Long id;
private String state;
@OneToMany
private List<Post> posts;
public Thread() { }
@PrePersist
public void prePersist() {
Authentication auth = SecurityContextHolder.getContext().getAuthentication();
posts = new ArrayList<>();
state = "OPEN";
}
@PreUpdate
public void preUpdate() {
Authentication auth = SecurityContextHolder.getContext().getAuthentication();
}
public void submitPost(Post newPost) {
posts.add(newPost);
}
public Long getThisId() {
return id;
}
public List<Post> getPosts() {
return posts;
}
public void setPosts(List<Post> posts) {
this.posts = posts;
}
public String getState() {
return state;
}
public void setState(String state) {
this.state = state;
}
}
@Entity
@Table(name = "posts")
public class Post extends ResourceSupport {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "id")
private Long id;
private String postText;
@ManyToOne
private Thread thread;
public Post() { }
public Long getThisId() {
return id;
}
public Thread getThread() { return thread; }
public String getPostText() {
return postText;
}
public void setPostText(String postText) {
this.postText = postText;
}
public void setThread(Thread thread) {
this.thread = thread;
}
}
Я довольно новичок в JPQL, поэтому могу ошибаться.
Есть идеи, что я здесь не так делаю?