我正在使用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新语法的原因......你有什么想法吗?感谢。
答案 0 :(得分:1)
在JPQL中,您使用实体。在您的情况下,您需要的是本机查询和SqlResultSetMapping。请查看此ConstructorResult JavaDoc以获取示例。
答案 1 :(得分:0)
或者,您可以将User
类修改为可以映射到@Entity
表以外的特定表的实体(由P042USER
注释)。例如,您将其映射到名为ANOTHER_USER
的表。当您创建新的用户实体时,它们可以保留到您的ANOTHER_USER
。同时,当您对P042USER
表执行本机SQL查询时,可以将本机SQL的结果映射到User
类。
可以在我的github repo中看到此实现的示例。