2015-06-25 33 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 }}