Spring JPA。仅调用 @ManyToMany 而不是整个对象

Spring JPA. Call @ManyToMany ONLY and not the whole object

假设我有这样的东西:

   @ManyToMany(fetch = FetchType.LAZY)
   @JoinTable(name = "assigned_tasks", joinColumns = @JoinColumn(name = "user_id", referencedColumnName = "id"), inverseJoinColumns = @JoinColumn(name = "task_id", referencedColumnName = "id"))
   private Set<Task> assignedTasksDoer = new HashSet<>();

在我的“用户”实体中 class。

当我获取用户时,它会为我提供所有详细信息。那太好了。没有任何错误。 但是我怎样才能把它分成几个部分,例如,当我只想获取用户的“assigned_tasks”时,我可以从 UserController 以外的其他控制器获取它,即 AssignedTasksController?

如果有人感兴趣,我愿意提供更多细节。

在我开始这种面向对象的方法时请帮助我!!是的,使用 jpa、实体、DAO 和存储库很棒,同时让 Spring 处理幕后的所有事情也很棒,但是它有限制吗?我能否完全避免编写 sql 查询和准备语句或其他我必须求助于它的情况?

TL;DR: 用户实体也有其他字段。我想制作一个控制器路由,每次只获取用户分配的任务,而不是整个对象。我该怎么做?

我假设您正在使用 Spring Data JPA。在那种情况下,您很可能已经有了类似 UserRepository extends JpaRepositry<User, Long> 的东西(假设主键是 Long)。

只需创建一个 TaskRepository extends JpaRepository<Task, Long> 并添加以下方法:List<Task> findAllByUserId(Long userId); 到该界面。这假设 Task 有一个字段 User user 并且 User 的主要字段称为 id(因此是“byUserId”)。

有关如何使用 Spring 数据存储库创建查询的更多详细信息,请参阅 Spring Data JPA, Query Creation

如果您需要更多控制,还可以查看同一文档中的 @Query 注释。