如何在spring boot和hibernate中计算特定id的记录

Posted

技术标签:

【中文标题】如何在spring boot和hibernate中计算特定id的记录【英文标题】:How to count records of particular id in spring boot and hibernate 【发布时间】:2015-11-25 04:07:17 【问题描述】:

我正在开发一个使用 Spring Boot 和 Hibernate 的项目。我想根据表中的 id 来计算记录。我可以统计表的所有记录,但无法根据外键统计记录。

这是我的控制器代码

@RequestMapping("/rating/id")
@ResponseBody 
 public long getRatingInfo(@PathVariable("id") long id, HttpServletRequest req, HttpServletResponse res) throws Exception 

long postobj = myDao.count();
return postobj;

这里我在 url 中传递了一个 id,但是没有 count 的方法来传递这个 id 来查找记录。

这是我的道界面

@Transactional
public interface MyDaoInterface extends CrudRepository<Rating, Long>

【问题讨论】:

您想计算给定idrating 吗? 实际上我的数据库中有评级表。在这张表中,我有 post_id、user_id 和 rating_points 列。 post_id 可以是多个,我想计算给定 post_id 的所有行 【参考方案1】:

将此添加到您的 DAO:

@Query(countByPostId)
Integer countByPostId(Long post_id);

final String countByPostId= "SELECT COUNT(ra) FROM Rating ra WHERE ra.post_id = ?1"

同样称呼它:

@RequestMapping("/rating/id")
@ResponseBody 
public long getRatingInfo(@PathVariable("id") long id, HttpServletRequest req, HttpServletResponse res) throws Exception 

long postobj = myDao.countByPostId(id);
return postobj;

EDIT:cmets中的第二个问题:

@Transactional
public interface MyDaoInterface extends CrudRepository<Rating, Long>
   List<Rating> findByPostId(Long id);

和你的来电者:

@RequestMapping("/rating/id")
@ResponseBody 
public long getRatingInfo(@PathVariable("id") long id, HttpServletRequest req, HttpServletResponse res) throws Exception 

 List<Rating> ratings = myDao.findByPostId(id);
 long postobj = ratings.size() //use this code where you effectively need the # of entires.

 return ratings;

【讨论】:

我正在运行这个查询... "select count(r.id),points from Rating r where r.postId=?1 group by points";我使用 List 作为返回类型.. 我得到结果但没有在结果中得到列名 我应该在这里做什么你能告诉我吗? 试试:select count(r.id), r.points from Rating r where r.post_id=?1 group by r.points 同样的结果...没有得到列名 我无法理解它是哪一列的值【参考方案2】:
@RequestMapping("/rating/id")
@ResponseBody 
public long getRatingInfo(@PathVariable("id") long id, HttpServletRequest req, HttpServletResponse res) throws Exception 

 List<Rating> ratings = myDao.findByPostId(id);
 long postobj = ratings.size() //use this code where you effectively need the # of entires.

 return ratings;

【讨论】:

以上是关于如何在spring boot和hibernate中计算特定id的记录的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Spring Boot 中使用 Hibernate/JPA 返回多级 json

如何使用 Hibernate 在 Spring Boot 中处理数据库迁移?

如何在 Spring Boot 应用程序中使用 Hibernate 验证进行 Bean 验证?

如何在 Spring Boot 中自动装配 Hibernate SessionFactory

如何使用 Hibernate 和 Spring Boot 配置和监控 HikariCP

grails 3(spring-boot) - 如何配置hibernate二级缓存