Java 按收集规模排列的前5项记录
我有以下实体:Java 按收集规模排列的前5项记录,java,spring-data,jpql,Java,Spring Data,Jpql,我有以下实体: public final class Stock implements Serializable { @JsonIgnore @ManyToMany(mappedBy = "stocks", fetch = FetchType.LAZY) private Set<User> users = new HashSet<>(); [Other fileds] [getters/setters] } 我想要一个jqp
public final class Stock implements Serializable {
@JsonIgnore
@ManyToMany(mappedBy = "stocks", fetch = FetchType.LAZY)
private Set<User> users = new HashSet<>();
[Other fileds]
[getters/setters]
}
我想要一个jqpl查询,返回前5名股票实体。有人能帮我吗?假设您的实体映射如下
@Entity
public class Stock {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;
@Column
private String ticker;
@JsonIgnore
@ManyToMany(fetch = FetchType.LAZY, cascade = CascadeType.ALL)
@JoinTable(name = "stock_user", joinColumns = { @JoinColumn(name = "STOCK_ID", nullable = false, updatable = false) }, inverseJoinColumns = { @JoinColumn(name = "USER_ID", nullable = false, updatable = false) })
private Set<User> users = new HashSet<User>();
}
@实体
公开股{
@身份证
@GeneratedValue(策略=GenerationType.AUTO)
私人长id;
@纵队
专用字符串自动售票机;
@杰索尼奥雷
@ManyToMany(fetch=FetchType.LAZY,cascade=CascadeType.ALL)
@JoinTable(name=“stock\u user”,joinColumns={@JoinColumn(name=“stock\u ID”,nullable=false,updateable=false)},inverseJoinColumns={@JoinColumn(name=“user\u ID”,nullable=false,updateable=false)})
private Set users=new HashSet();
}
为了得到结果,我使用本机SQL执行了以下操作。如果您坚持使用JPQL,答案是您的朋友
public interface StockRepository extends JpaRepository<Stock, Integer> {
@Query(value = "SELECT s.ticker, COUNT(s.ticker) FROM stock s INNER JOIN "
+ "stock_user us ON s.id = us.stock_id INNER JOIN user u on us.user_id = u.id GROUP BY s.ticker order by count(*) desc limit 1", nativeQuery = true)
public List<Object[]> findStock();
}
公共接口StockRepository扩展了JpaRepository{
@查询(value=“从股票的内部联接中选择s.ticker、计数(s.ticker)”
+“s.id上的stock_user us=us.stock_id内部加入用户u ON us.user_id=u.id按s.ticker订单按计数分组(*)desc limit 1”,nativeQuery=true)
公共列表findStock();
}
假设您的实体映射如下
@Entity
public class Stock {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;
@Column
private String ticker;
@JsonIgnore
@ManyToMany(fetch = FetchType.LAZY, cascade = CascadeType.ALL)
@JoinTable(name = "stock_user", joinColumns = { @JoinColumn(name = "STOCK_ID", nullable = false, updatable = false) }, inverseJoinColumns = { @JoinColumn(name = "USER_ID", nullable = false, updatable = false) })
private Set<User> users = new HashSet<User>();
}
@实体
公开股{
@身份证
@GeneratedValue(策略=GenerationType.AUTO)
私人长id;
@纵队
专用字符串自动售票机;
@杰索尼奥雷
@ManyToMany(fetch=FetchType.LAZY,cascade=CascadeType.ALL)
@JoinTable(name=“stock\u user”,joinColumns={@JoinColumn(name=“stock\u ID”,nullable=false,updateable=false)},inverseJoinColumns={@JoinColumn(name=“user\u ID”,nullable=false,updateable=false)})
private Set users=new HashSet();
}
为了得到结果,我使用本机SQL执行了以下操作。如果您坚持使用JPQL,答案是您的朋友
public interface StockRepository extends JpaRepository<Stock, Integer> {
@Query(value = "SELECT s.ticker, COUNT(s.ticker) FROM stock s INNER JOIN "
+ "stock_user us ON s.id = us.stock_id INNER JOIN user u on us.user_id = u.id GROUP BY s.ticker order by count(*) desc limit 1", nativeQuery = true)
public List<Object[]> findStock();
}
公共接口StockRepository扩展了JpaRepository{
@查询(value=“从股票的内部联接中选择s.ticker、计数(s.ticker)”
+“s.id上的stock_user us=us.stock_id内部加入用户u ON us.user_id=u.id按s.ticker订单按计数分组(*)desc limit 1”,nativeQuery=true)
公共列表findStock();
}