【发布时间】:2013-01-03 22:47:59
【问题描述】:
我有以下类结构映射到我的数据库,注意在我的图表中 b 是 A 的一对多的孩子,等等。
a
-b
--c
-d
--e
---f
---g
现在,当我从休眠状态恢复结果集时,我将其插入 jibx 进行编组并发送给客户端。我的问题是当 jibx 尝试访问延迟加载记录时,我得到一个异常,因为此时它已与休眠会话断开连接。
现在更糟的是,有些交易我想拥有 a、b、c、d 类的所有记录,但没有 e、f、g 类的记录。但下一个查询可能需要所有 a、d、e、f、g 和一个 b,或者 c 和下一个查询所有 a、d、g 和其余的一个。
所以,我的 DAO 类看起来像这样
public class SurveyNameDAO extends HibernateDaoSupport
{
public List<SurveyName> getPermittedSurveys(String userName)
{
StringBuffer sql = new StringBuffer();
sql.append("select distinct sn ");
sql.append("from SurveyName as sn, SurveyNameStore name_store ");
sql.append("where name_store.showStoreLocation.storeName in (select ng.pnName ");
sql.append("from NukeGroups as ng, NukeUsers as nu ");
sql.append("where nu.pnName = '" + userName + "')");
SurveyName loc = null;
List l = getHibernateTemplate().find(sql.toString());
return l;
}
}
基本问题是我如何修改这个方法(很多人喜欢它),我可以添加一些指示符,说以我上面所说的方式加载返回类,然后完全断开休眠并忘记延迟加载当我将它发送到 jibx 时。
【问题讨论】:
-
建议将查询中的变量替换为 a、b、c、...,如上图所示,以便我们了解关系与查询的关系。除此之外,这比我经常做的 SQL 多一点,所以我不知道我可以在不付出更多努力的情况下提供帮助 =)
-
这不是 HQL 查询的问题,它与告诉 hibernate 如何将结果加载到其类中有关。