问题描述
我有2个模型和@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);
我不确定我是否要按照正确的方式进行操作。我想检索与用户模型上的以下列表数组中的每个用户对象关联的每个图片对象。任何想法将不胜感激。
解决方法
以下为您工作吗?
@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);