cerco di ottimizzare le query di database in Hibernate, ma ho trovato un bloccante:Hibernate - Evitare inutili unirsi quando si utilizza chiave esterna nella clausola where
<class name="SupportedLanguageVO" table="AR_SUPPORTED_LANG" >
<cache usage="read-only"/>
<id name="Id" type="java.math.BigInteger">
<column name="ID" sql-type="NUMBER(20)" not-null="true"/>
<generator class="assigned"/>
</id>
<property name="OrderSeq" type="java.math.BigInteger">
<column name="ORDER_SEQ" sql-type="NUMBER(20)" not-null="true"/>
</property>
<many-to-one name="Country" class="CountryVO" column="CTRY_CD_ID" cascade="none" >
<many-to-one name="Language" class="LanguageVO" column="LANG_CD" cascade="none" >
</class>
La chiave primaria del paese è il CTRY_CD_ID
. Se corro i seguenti criteri
Criteria crit = m_Session.createCriteria(SupportedLanguageVO.class);
crit.createCriteria("Country").add(Restrictions.eq("_CountryCode", p_countrycode));
crit.addOrder(Order.asc("OrderSeq"));
posso vedere, che si unisce al hibernate CTRY e le tabelle AR_SUPPORTED_LANG. Perché? Sarebbe meglio per eseguire
select * from AR_SUPPORTED_LANG where ctry_cd_id=?
SQL piuttosto che
select * from AR_SUPPORTED_LANG inner join ctry .... where ctry_cd_id=?
posso forzare sospensione per eseguire la prima query?
Purtroppo non ho l'oggetto, solo il codice del paese :-( – HamoriZ
Il codice del paese è l'id della tabella del paese? Se lo è, ibernazione non mi dispiacerebbe se costruisci l'oggetto a mano senza caricarlo dal db, purché si compili il campo id (come ad esempio: crit.add (Restrictions.eq ("Paese", nuovo CountryVO (p_country_code))))) – Thierry