是否有任何spring jpa等同于以下查询

时间:2015-06-25 06:07:12

标签: java spring hibernate jpa spring-data-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;

2 个答案:

答案 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();
	}}