![](/img/trans.png)
[英]Mapping JPA or Hibernate projection query to DTO (Data Transfer Object)
[英]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.