gpt4 book ai didi

sql - Hibernate - 在 where 子句中使用外键时避免不必要的连接

转载 作者:行者123 更新时间:2023-12-04 14:31:42 24 4
gpt4 key购买 nike

我尝试在 Hibernate 中优化数据库查询,但我发现了一个拦截器:

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

Country 的主键是 CTRY_CD_ID .如果我运行以下标准
  Criteria crit = m_Session.createCriteria(SupportedLanguageVO.class);
crit.createCriteria("Country").add(Restrictions.eq("_CountryCode", p_countrycode));
crit.addOrder(Order.asc("OrderSeq"));

我可以看到,hibernate 加入了 ctry 和 AR_SUPPORTED_LANG 表。
为什么?
跑起来会更好
select * from AR_SUPPORTED_LANG where ctry_cd_id=?

sql 而不是
select * from AR_SUPPORTED_LANG inner join ctry .... where ctry_cd_id=?

我可以强制 hibernate 运行第一个查询吗?

最佳答案

尝试为您的标准明确设置提取模式:

crit.setFetchMode("Country", FetchMode.SELECT);

关于sql - Hibernate - 在 where 子句中使用外键时避免不必要的连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2410715/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com