繁体   English   中英

将投影形式从休眠 HQL 查询映射到对象

[英]Mapping projection form hibernate HQL query into object

我只从数据库中的表中返回几列:

List<MyClass> l = (List<MyClass>) session.createQuery("Select p.one, p.two FROM MyClass p WHERE p.id IN :id")
                    .setParameter("userId", id)
                    .list();

但是,查询返回数组列表,例如

l.get(0) // [0] is object representing p.one in query, [1] p.two

是否有一种休眠的有效方法如何将其映射到 MyClass 对象? 所以查询实际上会返回 MyClass 对象列表,其中所选属性将具有值,其他属性将设置为 null?

我已经在使用构造函数的查询中阅读了new MyClass(arg1,arg2)方式,但是我也阅读了它是无效的。

感谢帮助!

您可以使用 try catch 块并使用 query.getSingleResult() 返回对象。

Query query = em.createNativeQuery("FROM TipoUsuario WHERE NAME = :name;", TipoUsuario.class)
        .setParameter("name", name);

TipoUsuario tipoUsuario = null;

try
{
    tipoUsuario = (TipoUsuario) query.getSingleResult();
}
catch ( Exception e )
{
    return null;
}

createNativeQuery 只是一个示例。 您可以改用 createNamedQuery 并将 HQL 放入带有 @NamedQueries 注释的实体中。

如果你想创建MyClass你只需要在你的查询中使用类的完全限定名称,例如

SELECT NEW my.pack.MyClass(p.one, p.two) FROM MyClass p WHERE p.id IN :id

我没有听说过这是无效的,我无法想象为什么会这样。 它只是在结果上调用构造函数,而不是将其作为数组或对象返回。 总的来说,这可能是一种非常好的获取方式,因为您只需选择所需的字段。

此处也更详细地解释了此选项和其他选项。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM