2015-09-04 28 views
1

我在spring引導中使用了hibernate。我想通過傳遞一個id從表中獲取下一個和上一個記錄。我在hql中寫了一個查詢來獲取表中的下一個和前一個記錄。問題是,我得到所有以前和所有下一個記錄,但我只想要一個前一個和最後一個記錄。如何在spring啓動時只使用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

你需要從HQL查詢返回一個列表,然後拿到第一個記錄在您的控制器,並將其發送到下一個類。 – artle

+0

你能編輯我的代碼嗎? –

+0

展示你的下一堂課; – artle

回答

1

這是你的下一個記錄

@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"; 

} 

控制器DAO

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 
} 
+0

非常感謝你@artle你的代碼工作 –

相關問題