JPA非实体未使用select-new语法映射错误

时间:2015-10-27 14:07:07

标签: jpa jpql

我正在使用select new语法来查询数据库中的非实体并获得未映射的错误...

对象(不是实体):

package user;

public class User {
  private int id;
  private String lastName;
  private String firstName;
  private String mail;
}

表格( P042USER )的创建方式如下:

CREATE TABLE P042USER (id INT PRIMARY KEY NOT NULL, lastname VARCHAR(100), firstname VARCHAR(100), email VARCHAR(255));

然后我想用选择新的语法来执行请求:

Query q = em.createQuery("SELECT NEW user.User(u.id, u.lastname, u.firstname, u.email) FROM P042USER u ORDER BY u.id");
return q.getResultList();

最后我得到了错误:

Caused by: org.hibernate.hql.internal.ast.QuerySyntaxException: P042USER is not mapped 

当然它没有映射,这就是我使用select新语法的原因......你有什么想法吗?感谢。

2 个答案:

答案 0 :(得分:1)

在JPQL中,您使用实体。在您的情况下,您需要的是本机查询和SqlResultSetMapping。请查看此ConstructorResult JavaDoc以获取示例。

答案 1 :(得分:0)

或者,您可以将User类修改为可以映射到@Entity表以外的特定表的实体(由P042USER注释)。例如,您将其映射到名为ANOTHER_USER的表。当您创建新的用户实体时,它们可以保留到您的ANOTHER_USER。同时,当您对P042USER表执行本机SQL查询时,可以将本机SQL的结果映射到User类。

可以在我的github repo中看到此实现的示例。