2015-06-25 38 views
2

查詢:是否有任何等同於次年春天JPA查詢

@Query("Select p.name,t.points from Player p,Tournament t where t.id=?1 And p.id=t.player_id") 

我有我的球員和比賽的實體及其相應的JPA庫。但問題是我們只能從我們的查詢中獲得實體,但我想要做上面的查詢,請幫助我解決這個問題。

這是我的SQL查詢我想補充,但在哪裏添加我沒有得到:

Select p.name, t.points_rewarded from player p, participant t where t.tournament_id="1" and t.player_id=p.id; 
+0

那麼'列表 findDayPlayedByGameIdAndDayPlayedGreaterThan(Long gameId,Integer gameDayCycle);'工作? – skozlov

+0

不,我想要從daybonus表中得到dayPlayed列的整數列表,但是dailybonus對象的上述返回列表 – ratnesh

+0

如果我沒有錯,上面的查詢也是JPQL查詢。 –

回答

0

這是你如何與JPQL做到這一點對JPA:

String queryString = "select p.name, t.points from Tournament t," + 
      " Player p where t.player_id=p.id " + 
      "and t.id= :id_tournament"; 

Query query = this.entityManager.createQuery(queryString); 
query.setParameter("id_tournament", 1); 
List results = query.getResultList(); 

有關JPQL查詢的更多信息,請參見JPA Query Structure (JPQL/Criteria)


這是浩,你可以使用HQL對Hibernate它做什麼,這些都是做這件事的方法有兩種:

String hql = "SELECT p.name, t.points from Player p,Tournament t WHERE t.id= '1' And p.id=t.player_id"; 
Query query = session.createQuery(hql); 
List results = query.list(); 

或者使用query.setParameter()方法是這樣的:

String hql = "SELECT p.name, t.points from Player p,Tournament t WHERE t.id= :tournament_id And p.id=t.player_id"; 
Query query = session.createQuery(hql); 
query.setParameter("tournament_id",1); 
List results = query.list(); 

有關HQL的更多信息,您可以查看此HQL Tutorial查詢。


注:

在這兩種情況下,你會得到對象的數組List<Object[]>的一個列表,其中元素一個array[0]p.name,第二個是t.points

+0

當然,這不是問題要求的JPA/JPQL,並且您可以修改您在那裏寫的內容以實際使用JPA –

+0

@NeilStockton我認爲OP正在尋找解決方案之一兩項技術,我更新了我的答案,包括「JPA」和「Hibernate」解決方案。 –

+0

非常感謝使用實體管理器,它的完成,謝謝我被困在它4-5小時,你救了我,我還需要在方法中添加@transactional,然後它的工作正常。 – ratnesh

0

TypedQuery instead of normal Query in JPA 這就是我一直在尋找,謝謝chsdk的幫助,我要創建的POJO類,並在上面的鏈接的答案是工作的罰款敵我我, 這裏是我的代碼示例

String querystring = "SELECT new example.restDTO.ResultDTO(p.name,t.pointsRewarded) FROM Player p, Participant t where t.tournamentId=?1 AND t.playerId = p.id ORDER by t.pointsRewarded DESC"; 
 
EntityManager em = this.emf.createEntityManager(); 
 
try { 
 
\t Query queryresults = em.createQuery(querystring).setParameter(1, tournamentId); 
 
\t List<ResultDTO> result =queryresults.getResultList(); 
 
\t return new ResponseEntity<>(result, HttpStatus.OK); 
 
} catch (Exception e) { 
 
\t e.printStackTrace(); 
 
\t return new ResponseEntity<>(HttpStatus.BAD_REQUEST); 
 
} finally { 
 
if (em != null) { 
 
\t em.close(); 
 
\t }}