是否有 spring jpa 等同于以下查询
Is there any spring jpa equivalent to following query
查询:
@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;
这是使用 JPA 的 JPQL 的方法:
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 for 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 查询的更多信息。
注:
在这两种情况下,您将获得对象数组 List<Object[]>
的列表,其中第一个元素 array[0]
是 p.name
,第二个元素是 t.points
.
TypedQuery instead of normal Query in JPA
这就是我一直在寻找的,感谢 chsdk 的帮助,我必须创建 pojos class,并且在上面 link 答案对我来说工作正常,
这是我的代码示例
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();
}}
查询:
@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;
这是使用 JPA 的 JPQL 的方法:
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 for 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 查询的更多信息。
注:
在这两种情况下,您将获得对象数组 List<Object[]>
的列表,其中第一个元素 array[0]
是 p.name
,第二个元素是 t.points
.
TypedQuery instead of normal Query in JPA 这就是我一直在寻找的,感谢 chsdk 的帮助,我必须创建 pojos class,并且在上面 link 答案对我来说工作正常, 这是我的代码示例
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();
}}