如何在spring boot中使用hql只获取一条记录
Posted
技术标签:
【中文标题】如何在spring boot中使用hql只获取一条记录【英文标题】:How to get only one record using hql in spring boot 【发布时间】:2015-11-30 03:51:39 【问题描述】:我正在使用带有 Spring Boot 的休眠模式。我想通过传递一个 id 从表中获取下一条和上一条记录。我在 hql 中编写了一个查询来从表中获取下一个和上一个记录。问题是我得到了所有以前和所有下一个记录,但我只想要一个前一个和一个最后一个记录。
这是我的 DAO 类,用于下一条记录
@Transactional
public interface DataDao extends CrudRepository<Data, Long>
@Query(getDataId)
NextPrevData getDataId(Long post_id, Long data_id);
final String getDataId= "select new netgloo.models.NextPrevData(d.id) from Data d where d.postId=?1 and d.id>?2";
这里是 DAO 以前的记录
@Transactional
public interface PrevDao extends CrudRepository<Data, Long>
@Query(getDataId)
NextPrevData getDataId(Long post_id, Long data_id);
final String getDataId= "select new netgloo.models.NextPrevData(d.id) from Data d where d.postId=?1 and d.id<?2";
这是我的控制器
@RequestMapping("/post_id/data_id")
@ResponseBody
public Next getDataInfo(@PathVariable("post_id") long post_id, @PathVariable("data_id") long data_id, HttpServletRequest req, HttpServletResponse res) throws ServletException
NextPrevData Next = dataDao.getDataId(post_id, data_id);
NextPrevData Prev = prevDao.getDataId(post_id, data_id);
Post2 postobj = postDao2.findOne(post_id);
Data d = dataDao.findOne(data_id);
if(Next.isEquals(null))
postobj.setNextStatus(false);
else
postobj.setNextStatus(true);
if(Prev.isEmpty())
postobj.setPrevStatus(false);
else
postobj.setPrevStatus(true);
return new Next(Next,postobj,Prev,d);
这是我的下一课
public class Next
private NextAndPrevious Next;
private NextAndPrevious Prev;
private Post2 post;
private Data d;
public Post2 getPost()
return post;
public void setPost(Post2 post)
this.post = post;
public Next(NextAndPrevious Next, Post2 postobj, NextAndPrevious Prev, Data d)
this.Next = Next;
this.post = postobj;
this.Prev = Prev;
this.d = d;
//Getters and seters
【问题讨论】:
您需要从 hql 查询中返回一个列表,然后在您的控制器中获取第一条记录并将其发送到 Next 类。 你能编辑我的代码吗? 显示你的下一堂课; 好的..请检查我编辑的问题 【参考方案1】:这是你的下一条记录的 DAO
@Transactional
public interface DataDao extends CrudRepository<Data, Long>
@Query(getDataId)
List<NextPrevData> getDataId(Long post_id, Long data_id);
final String getDataId= "select new netgloo.models.NextPrevData(d.id) from Data d where d.postId=?1 and d.id>?2";
这是你以前记录的 DAO
@Transactional
public interface PrevDao extends CrudRepository<Data, Long>
@Query(getDataId)
List<NextPrevData> getDataId(Long post_id, Long data_id);
final String getDataId= "select new netgloo.models.NextPrevData(d.id) from Data d where d.postId=?1 and d.id<?2";
你的控制器
RequestMapping("/post_id/data_id")
@ResponseBody
public Next getDataInfo(@PathVariable("post_id") long post_id, @PathVariable("data_id") long data_id, HttpServletRequest req, HttpServletResponse res) throws ServletException
List<NextPrevData> Next = dataDao.getDataId(post_id, data_id);
List<NextPrevData> Prev = prevDao.getDataId(post_id, data_id);
Post2 postobj = postDao2.findOne(post_id);
Data d = dataDao.findOne(data_id);
long a=0;
long b=0;
if(Next.isEmpty())
postobj.setNextStatus(false);
else
postobj.setNextStatus(true);
a = Next.get(0).getDataId();
if(Prev.isEmpty())
postobj.setPrevStatus(false);
else
postobj.setPrevStatus(true);
b = Prev.get(0).getDataId();
return new Next(a,postobj,b,d);
这是你的下一堂课
public class Next
private long Next;
private long Prev;
private Post2 post;
private Data d;
public Post2 getPost()
return post;
public void setPost(Post2 post)
this.post = post;
public Next(long Next, Post2 postobj, long Prev, Data d)
this.Next = Next;
this.post = postobj;
this.Prev = Prev;
this.d = d;
//Getters and setters
【讨论】:
以上是关于如何在spring boot中使用hql只获取一条记录的主要内容,如果未能解决你的问题,请参考以下文章
如何配置 IntelliJ HQL 控制台以使用 Spring Boot
如何在spring sts中获取spring boot web项目的默认结构?
如何获取spring boot application.yml里面的值