春季JPA仅调用@ManyToMany而不是整个对象

问题描述

假设我有这样的东西:

   @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<>();

在“用户”实体类中。

当我获取用户时,它带给我所有细节。那太好了。没有任何错误。 但是如何将它分成几部分,例如,当我只想获取用户的“ 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 Data存储库创建查询的更多详细信息,请参见Spring Data JPA,Query Creation

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

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...