使用Native Query从Hibernate的包中重新获取特定元素

时间:2015-08-05 00:23:11

标签: java spring hibernate

这是映射

的一部分
<class name="org.me.MainObject" table="objects">
   <bag name="associatedIds" table="object_associations" lazy="false">
      <element column="association_id" not-null="true" type="long" />
   </bag>
</class>

这是我的查询

SELECT {o.*}, {oa.*}
FROM objects (NOLOCK) o INNER JOIN object_associations (NOLOCK) oa ON o.id = oa.object_id
WHERE o.id = ?

这是我的 java代码

final Query query getSessionFactory().getCurrentSession().createSQLQuery(ABOVE_QUERY)
     .addEntity("o", MainObject.class)
     .addJoin("oa", "o.associatedIds")
     .setResultTransformer(CriteriaSpecification.DISTINCT_ROOT_ENTITY);

query.setParameter("objectId", someIdVariable);

@SuppressWarnings("unchecked")
List<MainObject> resultList = query.list();

问题是因为 associatedIds 只是 MainObject 类中的Long对象(不是实体)的List,所以此代码失败了SQLQueryParser类中的空指针异常(resolveProperties方法)。

我想知道是否有办法做到这一点。如果我从查询中删除了Alias和Join,或者如果我用oa。*替换{oa。*},hibernate将发出另一个SELECT语句来加载关联ID。但这正是我不希望它做的事情。我不希望Hibernate发出另一个选择,更重要的是我想自己编写查询,这样我就可以提供 NOLOCK 提示。

0 个答案:

没有答案
相关问题