这是数据库中的行。
group userid
1 a
2 b
1 c
3 d
我想使用@query注释查询
@Query(value ="SELECT *, count(*) as cnt FROM user group by body order by cnt DESC", nativeQuery = true)
List<User> getGroupRanking();
并且,我希望得到结果
group cnt
1 2
2 1
3 d
但List<User>
收集不接受“cnt&#39;属性是别名。
另一个不接受的理由,用户定义的课程不包含&#39; cnt&#39;属性。我被定义为&#39; cnt&#39;用户类中的属性,如下面的代码。
public class User{
@Column(name ="group")
private String group;
..
private Integer cnt;
public Integer getCnt(){ return cnt; }
public void setCnt(Integer cnt){ this.cnt = cnt; }
}
虽然我会阻止更新架构,但上面的代码更新了架构。因为
appConfig.xml配置设置如下
<prop key="hibernate.hbm2ddl.auto">update</prop>
我不想更新架构,我想在使用@Query注释时通过User Class(bean)在JSP文件中显示cnt属性。如何接受&#39; cnt&#39;使用没有更新架构的User类的属性? &#39;如&#39;关键字使用情况不详细(link)
答案 0 :(得分:1)
很难理解你需要什么,但我会尝试......))
首先创建一个投影:
public interface UserCount {
User getUser();
long getUserCount();
}
然后创建一个存储库查询方法,返回此预测:
public interface UserRepo extends JpaRepository<User, Long> {
@Query("select u as user, count(u) as userCount from User u group by u order by userCount desc")
List<UserCount> getUserCounts();
}
然后,您可以获取UserCount
投影列表并将其发送到JSP视图。
补充阅读:
<强>控制器强>:
@Controller
public class UserController {
@Autoware
private UserRepo repo;
@GetMapping("/")
public String withCount(Model model) {
List<UserCount> userCounts = getUserCounts();
model.addAttribute("userCounts", userCounts);
return "userCounts";
}
}
<强> JSP 强>
<table>
...
<c:forEach items="${userCounts}" var="item">
<tr>
<td>${item.user.group}</td>
...
<td>${item.userCount}</td>
</tr>
</c:forEach>
</table>
我建议从 jsp 切换到thymeleaf。