2

私は4.3.11.Finalを休止状態使用していますが、このモデルと.hbm.xmlファイルがあります。Hibernateは別名とOracleスロー `ORA-00918設定されていません:曖昧列defined`エラー

ドメインクラス

public class Dossier { 
    private Long id; 
    private Power power; 
    private String dossierNumber; 

    // getter and stters 
} 

のHibernateのマッピング

<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 = ? 

iが使用のでHQLは、クエリのupdate DTR.DU_DossierセグメントにDU_Dossierためaliaseを設定しないので、私は、リポジトリに呼び出しでクエリのselect count(*) from dossier_detail udd where udd.dossier_id = id) = 0セグメントにおけるid iは、エラーの下にこれを取得する:

Caused by: java.sql.SQLSyntaxErrorException: ORA-00918: column ambiguously defined

どのように私はこの問題を解決することができますか?

答えて

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 
     ) 
) 
関連する問題