Java hibernate不设置别名,oracle抛出“ORA-00918:定义不明确的列”错误
我使用的是hibernate 4.3.11.Final,并且有以下模型和Java hibernate不设置别名,oracle抛出“ORA-00918:定义不明确的列”错误,java,spring,hibernate,hibernate-session,hibernate-filters,Java,Spring,Hibernate,Hibernate Session,Hibernate Filters,我使用的是hibernate 4.3.11.Final,并且有以下模型和.hbm.xml文件: 域类 public class Dossier { private Long id; private Power power; private String dossierNumber; // getter and stters } 休眠映射文件 <hibernate-mapping> <class name="com.rg
.hbm.xml
文件:
域类
public class Dossier {
private Long id;
private Power power;
private String dossierNumber;
// getter and stters
}
休眠映射文件
<hibernate-mapping>
<class name="com.rgh.Dossier" table="DU_Dossier" schema="DTR">
<id name="id" type="long" >
<column name="id" />
<generator class="sequence" >
<param name="sequence">DTR.SEQ_Dossier</param>
</generator>
</id>
<many-to-one name="power" column="power_Id" entity-name="com.rgh.Power" not-null="true" />
<property name="dossierNumber" column="dossier_Number" type="string" not-null="true" />
<filter name="powerAuthorize" condition=" (exists (select t.id
from power_authorize t
where t.userid = :userId
and t.id = power_Id)
or (select count(*) from dossier_detail udd where udd.dossier_id = id) = 0
)"/>
</class>
</hibernate-mapping>
这是调用时生成的sql查询方法:
update DTR.DU_Dossier
set status = ?
where (exists
(select t.id
from power_authorize t
where t.userid = ?
and t.id = power_Id) and
or (select count(*) from dossier_detail udd where udd.dossier_id = id) = 0)
and ID = ?
由于hql没有在更新DTR.DU_档案
查询段中为DU_档案设置别名,因为我在select count(*)中使用了id
,其中udd.Dossier_id=id)=0
查询段,我得到以下错误:
原因:java.sql.SQLSyntaxErrorException:ORA-00918:column
含糊不清
如何解决此问题?尝试定义没有别名的筛选器表达式。。直接表格名称:
(exists (select power_authorize.id
from power_authorize
where power_authorize.userid = :userId
and power_authorize.id = du_dossier.power_Id)
or (select count(*) from dossier_detail
where dossier_detail.dossier_id = du_dossier.id) = 0
)
)
(exists (select power_authorize.id
from power_authorize
where power_authorize.userid = :userId
and power_authorize.id = du_dossier.power_Id)
or (select count(*) from dossier_detail
where dossier_detail.dossier_id = du_dossier.id) = 0
)
)