我的班级结构如下
class ABC {
abcid;
name;
listOfXYZObjects;
}
class XYZ {
xyzid;
name;
}
现在我已经在 hbm 文件中配置了上述类。DB中已经存储了一些数据。我有 abcId 和 xyzId 并想在单个 HQL 查询中只获取两个类的名称字段。
任何人都可以指导我以上。
如果您已将 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>
假设您的 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
使用下面所述的 hql 查询。
select new map(a.ABCname , b.XYZname)
from ABC a, XYZ b
where a.abcid = "+abcid+" and b.xyzid = "+xyzid+"
其中 from 子句是ABC
pojo 类和XYZ
pojo 类。这里两个类中的名称字段应该有不同的名称。或者你也可以使用 with outnew map
子句。
但是使用new map
子句对您来说会容易得多。
希望这对您有所帮助。
库什