我正在使用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.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>
这是我在存储库中调用的方法:
@Autowired
private SessionFactory sessionFactory;
public Session getSession() {
try {
return sessionFactory.getCurrentSession();
}
catch (Exception e) {
return sessionFactory.openSession();
}
}
@Override
public boolean changeStatus(Long dossierId, DossierStatus newStatus) {
String hql = " update " + Dossier.class.getName() + " e " +
" set e.status = :newStatus " +
" where e.id = :dossierId ";
Session session = getSession();
Filter filter = session.enableFilter("powerAuthorize");
filter.setParameter("userId", SecurityUtility.getAuthenticatedUser().getId());
Query query = session.createQuery(hql);
query.setParameter("newStatus", newStatus);
query.setParameter("dossierId", dossierId);
return query.executeUpdate() > 0;
}
这是调用方法时生成的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 没有为查询段设置别名,因为我在查询段中使用DU_Dossier
了我得到以下错误:update DTR.DU_Dossier
id
select count(*) from dossier_detail udd where udd.dossier_id = id) = 0
引起:java.sql.SQLSyntaxErrorException:ORA-00918:列定义不明确
我怎么解决这个问题?