1

私は JPQL の初心者ですが、単純な SQL リクエストを JPQL に変換する必要があります: SQL:

SELECT 
  *, 
  t.column1 + t.column2 as coefficient 
FROM 
  practice.People as t
ORDER BY coefficient

クラスにマップする方法がわからないため、そのネイティブクエリを使用できません:(私はこのJPQLクエリを使用しようとしています:

  SELECT NEW entities.PersonWell(c.peopleId, c.name, c.age, c.height, c.weight, 1)
  FROM 
    People AS c
  ORDER BY c.age;

このリクエストで「1」を係数に変更するにはどうすればよいですか? 私が想像した唯一の解決策は、単に使用することです:

SELECT NEW entities.PersonWell(c.peopleId, c.name, c.age, c.height, c.weight, c.age + c.height)
FROM 
  People AS c
ORDER BY c.age + c.height;

しかし、それが正しい解決策だとは思いません:(どうすればいいですか?

Infragileさん、ご回答ありがとうございます!

しかし、それでも機能しません:(それはあなたの答えを私のコードに適用した結果です:

public List<PersonWell> findWell(People person){
    String queryString = 
            "SELECT\n"
            + "NEW entities.PersonWell(c.peopleId, c.name, c.age, c.height, c.weight, c.speechspeed, "
            + "ABS(c.age - :age) + ABS(c.height - :height) + ABS(c.weight - :weight) + ABS(c.speechspeed - :speechspeed)) AS p \n" 
           +"FROM "
            + "People AS c\n"
           +"ORDER BY p.compatibility DESC";
    Query query = em.createQuery(queryString);
    query.setParameter("age", person.getAge());
    query.setParameter("height", person.getHeight());
    query.setParameter("weight", person.getWeight());
    query.setParameter("speechspeed", person.getSpeechspeed());
    List<PersonWell> resultList = query.getResultList();
    return resultList;
}

Ansこれはglassfishサーバーからの回答です:

java.lang.IllegalArgumentException: An exception occurred while creating a query in EntityManager: 
Exception Description: Error compiling the query [SELECT
NEW entities.PersonWell(c.peopleId, c.name, c.age, c.height, c.weight, c.speechspeed, ABS(c.age - :age) + ABS(c.height - :height) + ABS(c.weight - :weight) + ABS(c.speechspeed - :speechspeed)) AS p 
FROM People AS c
ORDER BY p.compatibility DESC], line 4, column 9: invalid navigation expression [p.compatibility], cannot navigate expression [p] of type [entities.PersonWell] inside a query.
4

1 に答える 1

0

このようなものはあなたのために機能しませんか?

SELECT NEW entities.PersonWell(c.peopleId, c.name, c.age, c.height, c.weight, c.age + c.height) AS p
FROM 
  People AS c
ORDER BY p.coefficient;

コンストラクターを使用しp.coefficientて値を入力するフィールドは どこですか。c.age + c.heightPersonWell

于 2013-03-06T10:38:30.780 に答える