【发布时间】:2012-02-20 16:26:46
【问题描述】:
这可能很简单,但我在 Google 上花了几个小时却找不到相关的答案。
我正在尝试将以下逻辑放入休眠状态,但我无法弄清楚如何。 这是我的设置:带有 2 个表 T1(ID,C1,C2)和 T2(column1,column2,column3)的 Mysql 数据库。 这就是我想要实现的
results = select ID, from T1 //This will result in multiple rows.
for(eachRow in results )
{
select column1,column2,column3 from T2 where ID=eachRow.ID
//Do some computation like
//Assign value of table "T1" column "C1" to table "T2" column "column1"
column1 = eachRow.C1
}
现在我可以想到一个逻辑,使用 Hibernate 的“from”子句将整个表读取到一个列表中并遍历它。但是,这可能会导致 OutOfMemory 异常。您能否建议 HQL 必须如何?
这就是我所做的
Session session = HibernateSession.getSessionFactory().openSession();
Transaction aTableTx = null;
try {
aTableTx = session.beginTransaction();
_allRows = session.createQuery("from T1").list();
for (Iterator<T1> iterator = _allRows.iterator(); iterator.hasNext();)
{
T1 aRow = iterator.next();
//Here I am planning to run a similar to
//_allRows = session.createQuery("from T2").list();
//Store the result and iterate through the list, but
//it is very inefficient.
}
aTableTx.commit();
【问题讨论】:
-
首先,HQL 不适用于表,但适用于实体。向我们展示您的实体而不是表格。
-
我同意,我已使用注释将表映射到类。所以现在我有 2 个类 T1 和 T2 我如何将上面的 mysql 查询放入 HQL。
-
HQL 查询与 SQL 查询几乎相同。您是否阅读过有关 HQL 的文档?你试过什么?
-
我已经编辑并添加了我的代码。