问题描述
假设我有这样的东西:
@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
批注。