在spring boot + JPA applition中,我有一个用户表和一个具有ManyToMany关系的项表。用户可以“跟踪”任何Item元素,以twitter / facebook样式获取与该项目相关的帖子,在项目更改时获取通知等等。
这些课程非常简单:
UserEntity.java
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@Size(max = 50)
@Column(name = "username", length = 50)
private String username;
@ManyToMany
@Cache(usage = CacheConcurrencyStrategy.NONSTRICT_READ_WRITE)
@JoinTable(name = "user_follow_item",
joinColumns = @JoinColumn(name="user_id", referencedColumnName="id"),
inverseJoinColumns = @JoinColumn(name="follow_item_id", referencedColumnName="id"))
private Set<Items> followItems = new HashSet<>();
ItemEntity.java
@ManyToMany(mappedBy = "followItems")
private Set<User> followUsers = new HashSet<>();
使用JpaRepository存储库类进行查询,并通过@RestController类在spring boot中公开,并且所有工作都正常。
问题是,在按ID查找项目的查询中,是否可以获取当前用户(已登录用户)是否在该项目后面?一个查询中的所有数据。通过此查询,我获得了项目信息,但如果用户是否关注该项目,我不知道如何获取:
@Query("select item from Item item left join item.followUsers userFollow on userFollow.login = ?#{principal.username} where item.id = :id ")
Item itemWithCurrentUserFollows(@Param("id") Long id);
本机SQL中的查询是这样的(当我在“跟随”部分获取数据时,我知道用户正在关注该项)但我不知道如何在JPA查询中实现这一点:
SELECT * FROM item left join (user user join user_follow_item follow) on user.id = follow.user_id and follow.follow_item_id = item.id and user.username = 'mockUser' where item.id = 1;
欢迎提出任何想法(@Formula,此信息的额外布尔值等等)
非常感谢!