2017-01-30 2 views
1

Я пытаюсь построить запрос, который возвращает все ToDoItems от прошедшего User (хочу передать авторизовалось User) с помощью JPQL.Создание запроса JPQL в CrudRepository

Вот мои вещи до сих пор не знаю, как построить его именно:

public interface UserRepository extends CrudRepository<User, Long> { 

    @Query(" from User u ") 
    public Iterable<ToDoItem> findAllToDosForLoggedInUser(@Param("user") User user); 

} 

Вот мои юридические лица (опущенные инкубационных и геттеров): 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; 
    } 
} 

Может ли кто-нибудь проверить, правильны ли мои сущности?

ответ

1

Вы запрос должен понравиться:

@Query(" select td from User u inner join u.toDoItems td where u = :user") 

В вашей пользователя сущности ваше отображение должно иметь mappedBy атрибут:

@OneToMany(cascade = CascadeType.ALL, mappedBy="user") 
private Set<ToDoItem> toDoItems; 
+0

IntelliJ higjlights пользователя в этом запросе и говорит: «он не может решить, что символ» и Я не могу проверить это сейчас, если он работает - IntelliJ просто ошибается или это неверно? – doublemc

+0

У меня есть версия 2016, и я получаю много неправильных синтаксических ошибок в этих запросах. Всегда лучше всего запускать код и видеть, что происходит –

Смежные вопросы