0

例如我有一个实体类ProfileProfilename,agelocation其他一些字段。

在我的 DAO 中,我进行如下查询

Query q = entityMgr.createNativeQuery("SELECT name, age FROM Profile", Profile.class);
List<Profile> list = new ArrayList<Profile>();
list = q.getResultList();

这可能吗?只返回 2 个字段并将其放入Profile实体中?

编辑:我已经尝试过这个并且Invalid column产生了错误。

4

2 回答 2

1

假设它确实给出了您提到的无效列错误,那么一种解决方法是创建空列并使用 SQL 中的实体字段名称对其进行命名:

Query q = entityMgr.createNativeQuery("SELECT name, age, '' as location FROM Profile", Profile.class);
于 2013-07-10T04:37:40.427 回答
1

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

您还可以使用构造函数表达式返回仅填充了所需字段的类。

您可以在您的情况下实现这一点,如下所示:

List<Profile> profiles = entityMgr.createQuery(
"SELECT NEW com.myproject.Profile(p.name, p.age) FROM Profile p",
Profile.class).getResultList();

显然,您的 Profile 类中需要一个匹配的构造函数。

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

于 2013-07-10T05:31:16.227 回答