Reputation: 3311
I'm trying to build a query that will return all the ToDoItems
from passed User
(want to pass logged in User
) using JPQL
.
Here is my stuff so far, don't know how to build it exactly:
public interface UserRepository extends CrudRepository<User, Long> {
@Query(" from User u ")
public Iterable<ToDoItem> findAllToDosForLoggedInUser(@Param("user") User user);
}
Here are my entities (omitted setters and getters): ToDoItem.java
@Entity
@Table (name = "TO_DO_ITEM")
public class ToDoItem extends BaseEntity {
@Column(name = "TITLE", nullable = false)
private String title;
@Column(name = "COMPLETED")
private boolean completed;
@Column(name = "DUE_DATE", nullable = false)
@Temporal(TemporalType.DATE)
protected Calendar dueDate;
// a ToDoItem is only associated with one user
@ManyToOne(cascade=CascadeType.PERSIST)
@JoinColumn(name = "USER_ID")
private User user;
// JPA demands empty contructor
public ToDoItem() {}
public ToDoItem(User user, String title, Calendar dueDate) {
this.user = user;
this.title = title;
this.dueDate = dueDate;
}
}
User.java
@Entity
@Table (name = "USERS")
public class User extends BaseEntity {
@Column(name = "USERNAME")
private String username;
@Column(name = "PASSWORD")
private String password;
@Column(name = "EMAIL")
private String email;
// user can have many ToDoItems
@OneToMany(cascade = CascadeType.ALL)
private Set<ToDoItem> toDoItems;
// JPA demands empty constructor
public User() {}
public User(String username, String password, String email) {
this.username = username;
this.password = password;
this.email = email;
}
}
Could someone also check if my entities are correct?
Upvotes: 1
Views: 956
Reputation: 26572
You query should like :
@Query(" select td from User u inner join u.toDoItems td where u = :user")
In your User entity your mapping should have the mappedBy
attribute:
@OneToMany(cascade = CascadeType.ALL, mappedBy="user")
private Set<ToDoItem> toDoItems;
Upvotes: 1