【问题标题】:Translate SQL to JPQL (SELECT NEW and "AS" keyword)将 SQL 转换为 JPQL(SELECT NEW 和“AS”关键字)
【发布时间】:2013-02-20 22:40:41
【问题描述】:

我是 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;

但我认为这不是正确的解决方案:(我该怎么办?

脆弱,感谢您的回答!

但它仍然不起作用:( 这是将您的答案应用于我的代码的结果:

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;
}

这是来自 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.

【问题讨论】:

    标签: mysql sql jakarta-ee jpql


    【解决方案1】:

    这样的事情不适合你?

    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.height 使用 PersonWell 构造函数放置。

    【讨论】:

    • 非常感谢您的回答!但是,很遗憾,它不起作用:(我将附加我的问题来描述我的问题。请查看详细信息。
    猜你喜欢
    • 2014-08-02
    • 2018-03-16
    • 2012-04-13
    • 2011-09-29
    • 2019-10-01
    • 1970-01-01
    • 2011-01-22
    • 1970-01-01
    • 2019-07-13
    相关资源
    最近更新 更多