我有两个模型和@ManyToMany
表。用户表和图片表。用户表中有一个其他用户的列表,后面是特定的用户。用户具有与每个图片的@OneToMany
关联。
用户
@OneToMany(mappedBy="user", cascade=CascadeType.ALL, fetch=FetchType.LAZY)
private List<Picture> pics;
@ManyToMany(fetch = FetchType.LAZY)
@JoinTable(
name="follows",
joinColumns = @JoinColumn(name="user_id"),
inverseJoinColumns = @JoinColumn(name = "following_id")
)
private List<User> following;
图片
private String image_url;
private String description;
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name="user_id")
private User user;
获取与所有用户相关联的所有图片的SQL查询(在User.following中(是:
SELECT * FROM `pictures` picture
WHERE `user_id` = '1' OR `user_id` IN (
SELECT `following_id` FROM `follows` WHERE `user_id`= 1
)
但是下表并不是它自己的实体,我正在绞尽脑汁地研究如何将SQL转换为自定义查询的HQL。我仍然无法弄清楚,这是我最接近的一次
@Query(value="SELECT p FROM Picture p WHERE p.user = :user OR p.user IN(SELECT p.followers FROM p.followers WHERE user = :user)")
List<Picture> findByPictureFollower(@Param("user") User user);
我不确定我的做法是否正确。我想在用户模型的Following List Array中检索与每个用户对象关联的每个图片对象。任何想法都将不胜感激。
以下内容适用于您吗?
@Query(value="SELECT p FROM Picture p WHERE p.user = :user OR p.user IN(SELECT f FROM User u JOIN p.followers f WHERE u = :user)")
List<Picture> findByPictureFollower(@Param("user") User user);