0

Hibernate 3 で Java を使用しています。

次のようなSQLがあります。

select sd3.id as id_3, sd2.id as id_2, sd1.id as id_1, od.id as id_0 from developer as sd3 
  left outer join developer as sd2 on sd3.sr_developer_id = sd2.id
  left outer join developer as sd1 on sd2.sr_developer_id = sd1.id
  left outer join developer as od on sd1.sr_developer_id = od.id
where sd3.id = 812

セルフジョインの場合です。

テーブル構造は次のようになります。

デベロッパー

id  | sr_developer_id
---------------------
812 | 463
463 | 8
8   | NULL

上記のクエリの出力は次のとおりです。

id_3 | id_2 | id_1 | id_0
--------------------------
 812 |  463 |  8   | NULL

ここで、このクエリを HQL または条件で変換したいと考えています。誰でも私を助けることができますか?

編集 :-

開発者.java

private long id;
private long srDeveloperID;

public long getId() {
     return id;
}

public void setId(long id) {
     this.id = id;
}

public long getSrDeveloperID() {
    return srDeveloperID;
}

public void setSrDeveloper(long srDeveloperID) {
    this.srDeveloperID = srDeveloperID;
}

Developer.hbm.xml

<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
    "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
    "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping >
    <class name="com.beans.Developer" table="developer">
        <id name="id" column="id" type="long">
            <generator class="native"/>
        </id>
        <property name="srDeveloperID" column="sr_developer_id" type="long"></property>
    </class>
</hibernate-mapping>
4

2 に答える 2

1

Hibernate との関連付けをマップするだけで、達成しようとしていることがより簡単になります。したがって、代わりに:

<property name="srDeveloperID" column="sr_developer_id" type="long"></property>

これを行う:

<many-to-one name="seniorDeveloper" column="sr_developer_id" class="Developer"/>

そして、Developer.javaでは、次の代わりに:

private long srDeveloperID;

これ:

private Developer seniorDeveloper;

次に、クエリを次のように記述できます。

select sd3.id, sd2.id, sd1.id, od.id
from Developer sd3 
left join sd3.seniorDeveloper sd2
left join sd2.seniorDeveloper sd1
left join sd1.seniorDeveloper od
where sd3.id = 8

これから、 のリストを取得できますObject[]。ID はObject[0]Object[1]... などになります。

于 2013-06-15T10:24:56.120 に答える
1

これを試してみてください.....

クエリをそのまま入れます(つまり、select........id=812) @ "Your Query";

{
     String sql = "Your Query";
     SQLQuery query = session.createSQLQuery(sql);

     query.setResultTransformer(Criteria.ALIAS_TO_ENTITY_MAP);
     return query.list();
}
于 2013-06-10T13:23:54.037 に答える