繁体   English   中英

加入休眠

[英]Joins in hibernate

我正在使用Java和Hibernate 3。

我有一个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或条件中转换此查询。 谁能帮我?

编辑: -

Developer.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>

试试这个......

把你的查询原样(即选择.................... id = 812)@“你的查询”;

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

     query.setResultTransformer(Criteria.ALIAS_TO_ENTITY_MAP);
     return query.list();
}

如果您只是将关联映射到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] ......中,依此类推。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM