我有这样的查询,我想从中提取电影标题及其评级
@Query(value ="SELECT m.title, avg(r.rating) " +
"FROM movies m " +
"INNER JOIN " +
"ratings r " +
"ON m.movieid = r.movieid " +
"WHERE m.genres LIKE %:genre% " +
"GROUP BY m.title " +
"ORDER BY avg(r.rating) DESC " +
"LIMIT 10",
nativeQuery = true)
List<Movies> topTenMoviesByGenreLikeIgnoreCase(@Param("genre") String genre);
但此列表显然不能存储具有2个值的结果集
在了解它之后,我发现例如这个链接Spring Data: JPA repository findAll()返回*Map而不是List?但我似乎不清楚它们的实现。
我不明白他们从哪里得到第一个链接中的长值
default Map<Long, TransactionModel> findByClientIdMap(Long id) {
return findByClientId(id).stream().collect(Collectors.toMap(TransactionModel::getId, v -> v));
}
我如何创建我的地图?
default Map<Movies, Float> topTenMoviesByGenreLikeIgnoreCaseMap(@Param("genre") String genre) {
return topTenMoviesByGenreLikeIgnoreCase(genre).stream().collect(Collectors.toMap());
}
电影类:
@Entity
public class Movies {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Integer movieid;
private String title;
private String genres;
@OneToMany(mappedBy = "movieid")
private Set<Ratings> rates = new HashSet<>();
public Movies() {
}
public Movies(String title, String genres) {
this.title = title;
this.genres = genres;
}
/*Getters and Setters for variables*/
public Set<Ratings> getRates() {
return rates;
}
public void setRates(Set<Ratings> rates) {
this.rates = rates;
}
}
评级等级:
@Entity
public class Ratings {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Integer rateid;
@ManyToOne
@JoinColumn(name = "movieid")
private Movies movieid;
@ManyToOne
@JoinColumn(name = "userid")
private Usrs userid;
private float rating;
private Integer timestamp;
public Ratings() {
}
public Ratings(Movies movieid, Usrs userid, float rating, Integer timestamp)
{
this.movieid = movieid;
this.userid = userid;
this.rating = rating;
this.timestamp = timestamp;
}
/*Getters and Setters for variables*/
}
试试这个:
@Query(value ="SELECT m.title as title, r.avg(rating) as rates " +
"FROM movies m " +
"INNER JOIN " +
"ratings r " +
"ON m.movieid = r.movieid " +
"WHERE m.genre = LIKE %:genre% " +
"GROUP BY r.avg(rating) " +
"ORDER BY r.avg(rating) DESC " +
"LIMIT 10",
nativeQuery = true)
List<Movies> topTenMoviesByGenreLikeIgnoreCase(@Param("genre") String genre);
default Map<Movies, Set<Ratings>> topTenMoviesByGenreLikeIgnoreCaseMap(@Param("genre") String genre) {
return topTenMoviesByGenreLikeIgnoreCase(genre).stream().collect(
Collectors.toMap(
tuple -> (tuple.getTitle(),
tuple -> (tuple.getRates())
));
}
您可以通过这种方式使用<code>对象[]
@Query(value ="SELECT m.title, avg(r.rating) " +
"FROM movies m " +
"INNER JOIN " +
"ratings r " +
"ON m.movieid = r.movieid " +
"WHERE m.genres LIKE %:genre% " +
"GROUP BY m.title " +
"ORDER BY avg(r.rating) DESC " +
"LIMIT 10",
nativeQuery = true)
List<Object[]> topTenMoviesByGenreLikeIgnoreCase(@Param("genre") String genre);
所以,然后
default Map<String, Float> topTenMoviesByGenreLikeIgnoreCaseMap(@Param("genre") String genre) {
return topTenMoviesByGenreLikeIgnoreCase(genre)
.stream()
.collect(Collectors.toMap((arr->arr[0].toString()), (arr->Float.valueOf(arr[1].toString()))));
}
如您所见,topTenMoviesByGenreLikeIgnoreCaseMap
返回地图
,其中电影标题是关键。要使电影
实体成为键,您应该使用JPQL
查询而不是本机查询。
应用:Spring防尘套 我试图用SqlResultSetMapping和NamedNativeQuery将非实体类映射到JPA存储库。 运行应用程序时出现以下错误: 通过字段'cityAddressRepository'表示不满足的依赖关系;嵌套异常是org.springframework.beans.factory.BeanCreationException:创建名称为'cityAddress
我在后端代码中使用了Spring数据jpa。我已经包含了实体,dto接口,服务和jpa存储库代码。 现在的问题是,当我在< code>TopicService中调用< code>getAllTopics()时。它返回< code>Topic对象的列表,而不是< code>TopicDto。< code>Topic对象包含一个< code >示例列表,我没有将它包含在< code>TopicDto中
我试图获取一个列表从数据库和findAll()返回空列表。我有多个jpa存储库,但只有一个不工作。这是代码: 这就是实体: 当我调用product类别epository.findAll()时,它返回空列表,因此我在数据库中有许多条目。谢谢你的帮助!
我有一个Spring Data JPA存储库接口,看起来像这样: 除了返回类型为HashMap的集合之外,是否有其他解决方法可以实现相同的效果
它是否将其存储在缓存中?我有一个应用程序,但应用程序中没有任何地方。属性是提到的db详细信息。我可以通过邮递员存储数据和查询它。
我在使用spring-data-neo4j的项目中遇到了一些问题。我有一个节点实体类: 并使用以下方法为其创建存储库: 然后测试,就像这样: > 创建id为123456的广告节点,包含关键字1和关键字2-ok 创建id为654321且包含关键字1的广告节点-确定 获取广告ID 654321-工作正常,生成的查询是: 开始=节点:(={0})返回params{0=654321} 使用findSimi