【发布时间】:2018-02-13 18:14:52
【问题描述】:
在创建我的第一个 Spring Boot 应用程序时,我偶然发现了在 Tag 实体中计算多对多引用的问题。
@Entity
public class Tag {
@Id
@GeneratedValue
private long id;
private String name;
@ManyToMany(cascade = CascadeType.ALL)
@JoinTable(name = "tag_post", joinColumns = @JoinColumn(name = "tag_id"), inverseJoinColumns = @JoinColumn(name = "post_id"))
private List<Post> posts;
private long weight;
在 spring 数据存储库中,我想将权重设置为等于给定标签的引用数
@Repository
public interface TagRepository extends JpaRepository<Tag, Long> {
@Modifying
@Query("Update Tag t SET t.weight = ( SELECT COUNT() FROM Post p WHERE t IN p.tags )")
// i want to make above query work
void updateWeights();
我可以简单地使用 findAll() 遍历所有标签并设置我自己的权重,但这可能不是最佳解决方案。
我应该怎么做才能使这个查询起作用?我感谢任何建议。
(希望我的问题不要因为太琐碎而被删除)
【问题讨论】:
-
“我想让上面的查询工作”。运行查询时会发生什么?
标签: hibernate spring-data-jpa hql