0

私は次のようなクラス構造を持っています

class ABC {
abcid;
name;
listOfXYZObjects;
}

class XYZ {
xyzid;
name;
}

上記のクラスを hbm ファイルに設定しました。すでにDBに保存されているデータがあります。私は abcId と xyzId を持っていて、単一の HQL クエリで両方のクラスの名前フィールドのみを取得したいと考えています。

上記のガイドを教えてください。

4

3 に答える 3

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_ として選択します。および s1_.id=?

SCASCカレッジ--------学生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 クラスです。ここでは、両方のクラスの名前フィールドに異なる名前を付ける必要があります。または、outnew map句を使用することもできます。

しかし、new map句を使用すると、はるかに簡単になります。

これがお役に立てば幸いです。

クッシュ

于 2012-08-20T12:17:24.987 に答える
0

XYZ クラスが ABC クラスに関連付けられるように hbm を構成した場合、取得は、クラス 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 に答える