Hibernate не устанавливает псевдонимы и оракула "ORA-00918: столбец неоднозначно определен" ошибка
Я использую 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: столбец определен неоднозначно
Как я могу решить эту проблему?
1 ответ
Попробуйте определить выражение фильтра без псевдонимов... только прямые имена таблиц:
(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
)
)