我有一个模特:
public class SomeModel extends Model {
private String name;
private String description;
private String comment;
... a lot of other fields
private String note;
}
我想从数据库中获取模型列表作为仅包含所需字段的地图列表。我按照以下方式做到了:
EntityManager em = GuiceConfigSingleton.inject(EntityManager.class);
Query query = em.createQuery("SELECT
o.name AS ModelName,
o.description AS ModelDescription,
o.comment AS ModelComment,
o.note AS ModelNote
FROM SomeModel o");
query.setHint(QueryHints.RESULT_TYPE, ResultType.Map);
此查询的结果列表是地图列表。并且每个映射仅包含第一个(ModelName)和最后一个(ModelNote)字段(其他字段在数据库中不为空)。当我没有" as"只使用:
Query query = em.createQuery("SELECT
o.name,
o.description,
o.comment,
o.note
FROM SomeModel o");
我得到了所有的字段,但没有正确的密钥。怎么了?
屏幕截图简化示例:
使用" AS":http://imgur.com/bKZnqSx 没有" AS":http://imgur.com/PieCRzg
更新 这是EclipseLink 2.5.0中的一个错误。 2.5.2一切都还可以!
答案 0 :(得分:0)
还有另一种获取这些字段的方法
Query query = entityManager.createNativeQuery("your existing query");
final List<Object[]> rsList = (List<Object[]>) query.getResultList();
for (Object[] objects : rsList) {
String modelName = objects[0] == null ? ""
: objects[0].toString();
String modelDesc = objects[1] == null ? ""
: objects[1].toString();
String comment = objects[2] == null ? ""
: objects[2].toString();
String note = objects[3] == null ? ""
: objects[3].toString();
}
我希望它有所帮助。
答案 1 :(得分:0)
这是EclipseLink 2.5.0版本中的一个错误。从2.5.1开始一切正常!
获得的经验教训:始终检查最后一个版本。