【问题标题】:Creating a JPQL query in CrudRepository在 CrudRepository 中创建 JPQL 查询
【发布时间】:2017-01-30 22:54:13
【问题描述】:

我正在尝试构建一个查询,该查询将使用JPQL从传递的User(想要传递登录的User)返回所有ToDoItems。

到目前为止,这是我的东西,不知道如何构建它:

public interface UserRepository extends CrudRepository<User, Long> {

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

}

这是我的实体(省略了 setter 和 getter): 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;
   }
}

有人可以检查我的实体是否正确吗?

【问题讨论】:

    标签: java hibernate jpa spring-data-jpa jpql


    【解决方案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;
    

    【讨论】:

    • IntelliJ higjlights 用户在该查询中说“它无法解析该符号”,我现在无法检查它是否有效 - IntelliJ 是错误还是不正确?
    • 我有 2016 版本,但我在这些查询中遇到很多错误的语法错误。运行代码并查看会发生什么总是最好的方法
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-05-11
    • 1970-01-01
    • 2016-12-19
    • 2011-12-04
    • 2021-08-10
    • 2018-07-12
    • 2017-03-10
    相关资源
    最近更新 更多