[英]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.