我的课程结构如下
class ABC {
abcid;
name;
listOfXYZObjects;
}
class XYZ {
xyzid;
name;
}
现在我在hbm文件中配置了上面的类。数据库中已存储了一些数据。我有abcId和xyzId,并希望在单个HQL查询中只获取两个类的名称字段。
任何人都可以指导我上面。
答案 0 :(得分: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>
答案 1 :(得分: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]);
}
输出:
Hibernate:选择this_.name作为y0_,s1_.name作为y1_来自College1 this_ inner join Student1 s1_ on this_.id = s1_.colg_id where this_.id =?和s1_.id =?
SCASC学院--------学生1
答案 2 :(得分:0)
使用下面提到的hql查询。
select new map(a.ABCname , b.XYZname)
from ABC a, XYZ b
where a.abcid = "+abcid+" and b.xyzid = "+xyzid+"
其中in子句是ABC
pojo类和XYZ
pojo类。这两个类中的名称字段应该具有不同的名称。或者您也可以使用new map
子句。
但是使用new map
子句对你来说会容易得多。
希望这会对你有所帮助。
库什