我仅从数据库表中返回几列:
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?
我已经在construtor的查询中了解了new MyClass(arg1,arg2)
的方式,但是我也读到它无效。
感谢帮助!
答案 0 :(得分:0)
您可以使用try catch块并使用query.getSingleResult()返回Object。
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的Entity中。
答案 1 :(得分:0)
如果您要创建MyClass
,则只需在查询中使用该类的标准名称即可,例如
SELECT NEW my.pack.MyClass(p.one, p.two) FROM MyClass p WHERE p.id IN :id
我还没有听说过这种方法无效,也无法想象为什么会这样。它只是对结果调用构造函数,而不是将其作为数组或对象返回。总体而言,这可能是一种非常好的获取方法,因为您只需选择所需的字段即可。
此选项和其他选项也将更详细地说明here。