如果用户在使用JPA / Hibernate的查询中跟踪元素,则获取

时间:2018-02-23 12:17:45

标签: java hibernate jpa spring-boot hibernate-mapping

在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,此信息的额外布尔值等等)

非常感谢!

0 个答案:

没有答案