Spring 如何将entityManager.nativeQuery的返回值映射到实体类?

Spring 如何将entityManager.nativeQuery的返回值映射到实体类?,spring,oracle,hibernate,dao,Spring,Oracle,Hibernate,Dao,例如,我有一个实体类Profile。 Profile有name,age,location和一些其他字段 在我的DAO中,我做了一个如下的查询 Query q = entityMgr.createNativeQuery("SELECT name, age FROM Profile", Profile.class); List<Profile> list = new ArrayList<Profile>(); list = q.getResultList(); Query

例如,我有一个实体类
Profile
Profile
name
age
location
和一些其他字段

在我的DAO中,我做了一个如下的查询

Query q = entityMgr.createNativeQuery("SELECT name, age FROM Profile", Profile.class);
List<Profile> list = new ArrayList<Profile>();
list = q.getResultList();
Query q=entityMgr.createNativeQuery(“从概要文件中选择名称、年龄”,Profile.class);
列表=新的ArrayList();
list=q.getResultList();
这可能吗?只返回2个字段并将其放入
配置文件
实体

编辑:
我已经试过了,并且产生了一个
无效列
错误。

假设它确实如您所述给出了无效列错误,那么一个解决方法是创建空列,并在SQL中使用实体的字段名对其命名:

Query q = entityMgr.createNativeQuery("SELECT name, age, '' as location FROM Profile", Profile.class);

此解决方案不使用本机查询,但我不明白您为什么要首先使用本机查询

您还可以使用返回一个只填充了必需字段的类

您可以在以下情况下实现这一点:

List<Profile> profiles = entityMgr.createQuery(
"SELECT NEW com.myproject.Profile(p.name, p.age) FROM Profile p",
Profile.class).getResultList();
List profiles=entityMgr.createQuery(
“从概要文件p中选择新的com.myproject.Profile(p.name,p.age)”,
getResultList();
显然,在Profile类中需要一个匹配的构造函数


您不仅需要以这种方式构造实体,还可以构造任何类,只要您有一个匹配的构造函数并且该类是完全限定的。

尝试一下,看看发生了什么请参见上面的编辑。我假设这是一个运行时错误,因为它不是getResultList()引发的错误之一。所以我假设错误在您的查询中。你能发布错误吗?我以前试过,先生,但是我遇到了一个问题,例如,我有一个查询,它应该返回名称(字符串)和位置(字符串),另一个查询,它返回名称(字符串)和电子邮件(另一个字符串)。如果我这样做,我只能有一个Profile(string,string)构造函数,有什么解决方法吗,先生?正如我前面提到的,您不仅需要以这种方式创建实体,所以您可以为每个组合创建不同的类,然后在查询中构造该对象。e、 g.NameAndAgeProfile(字符串名称、字符串年龄)和nameandameailprofile(字符串名称、字符串电子邮件)谢谢Trevor,尽管这个解决方案有点麻烦。我想要的是保留我的实体,而不是额外的类。