父对象和列表上的HQL选择查询

时间:2012-08-20 08:57:49

标签: java hibernate hql

我的课程结构如下

class ABC {
abcid;
name;
listOfXYZObjects;
}

class XYZ {
xyzid;
name;
}

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

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

3 个答案:

答案 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子句对你来说会容易得多。

希望这会对你有所帮助。

库什