查询:
@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 :(得分:0)
这是使用JPQL for 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();
您可以查看此JPA Query Structure (JPQL / Criteria)以获取有关JPQL查询的更多信息。
你可以使用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 Tutorial以获取有关HQL查询的更多信息。
注意:强>
在这两种情况下,您都会得到一个Object的数组List<Object[]>
列表,其中第一个元素array[0]
是p.name
,第二个是t.points
。
答案 1 :(得分:0)
TypedQuery instead of normal Query in JPA 这就是我想要的,感谢chsdk的帮助,我必须创建pojos类,并在上面的链接回答是很好的敌人, 这是我的代码示例
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 {
Query queryresults = em.createQuery(querystring).setParameter(1, tournamentId);
List<ResultDTO> result =queryresults.getResultList();
return new ResponseEntity<>(result, HttpStatus.OK);
} catch (Exception e) {
e.printStackTrace();
return new ResponseEntity<>(HttpStatus.BAD_REQUEST);
} finally {
if (em != null) {
em.close();
}}