0

我的班级结构如下

class ABC {
abcid;
name;
listOfXYZObjects;
}

class XYZ {
xyzid;
name;
}

现在我已经在 hbm 文件中配置了上述类。DB中已经存储了一些数据。我有 abcId 和 xyzId 并想在单个 HQL 查询中只获取两个类的名称字段。

任何人都可以指导我以上。

4

3 回答 3

0

如果您已将 hbm 配置为 XYZ 类与 ABC 类相关,则检索就像您仅从 ABC 类检索一样。

例如 :getHibernateTemplate().load(ABC.class, someABCId);

ABC 的 Hbm:

<class name="ABC" table="abc_table" mutable="false">
    <cache usage="read-only"/>
    <id name="abcId" column="id">
        <generator class="increment"/>
    </id>
    <property name="name" column="name"/>
    <list name="listOfXYZObjects" lazy="true" >
        <key column="abc_id"/>
        <index column="id"/>
        <one-to-many class="XYZ"/>
    </list>
</class>
于 2012-08-20T09:07:04.060 回答
0

假设您的 ABC 是大学,XYZ 是学生。使用 Criteria,我们可以得到大学名称和学生姓名,如下所示。

Criteria c = s.createCriteria(College.class,"clg");
c.createCriteria("students", "s");
c.add(Restrictions.eq("id",new Integer(1)));
c.add(Restrictions.eq("s.id", new Integer(1)));

ProjectionList properties = Projections.projectionList();
properties.add(Projections.property("name"));
properties.add(Projections.property("s.name"));
c.setProjection(properties);

List l=c.list();
Iterator it=l.iterator();
while(it.hasNext())
{
    Object ob[] = (Object[])it.next();
    System.out.println(ob[0]+"--------"+ob[1]);
}

输出:

休眠:选择this_.name为y0_,s1_.name为y1_ from College1 this_inner join Student1 s1_ on this_.id=s1_.colg_id where this_.id=? 和 s1_.id=?

SCSC学院--------学生1

于 2012-08-20T10:43:32.417 回答
0

使用下面所述的 hql 查询。

select new map(a.ABCname , b.XYZname) 
from ABC a, XYZ b 
where a.abcid = "+abcid+" and b.xyzid = "+xyzid+"

其中 from 子句是ABCpojo 类和XYZpojo 类。这里两个类中的名称字段应该有不同的名称。或者你也可以使用 with outnew map子句。

但是使用new map子句对您来说会容易得多。

希望这对您有所帮助。

库什

于 2012-08-20T12:17:24.987 回答