如何在spring boot中只使用hql获取一条记录

时间:2015-09-04 05:00:27

标签: spring hibernate rest spring-boot hql

我正在使用带弹簧启动的休眠。我希望通过传递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

1 个答案:

答案 0 :(得分: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
}