使用 Hibernate 实现以下涉及子查询的 SQL 查询的等效方法是什么:
SELECT cat.description, cat.code FROM
THING_CATEGORY cat
WHERE cat.code IN (
SELECT thing.CATEGORY_CODE FROM THING thing
WHERE thing.COUNTRY_CODE IN ('AU', 'US', 'UK')
)
最好的方法可能是将其直接传递给数据库,以我的数据库风格的 SQL (PL/SQL) 本地完成,但我实际上无法弄清楚它是如何在 HibernateCriterion
对象中完成的,所以我特别想知道。
请注意:该THING
表绝对庞大并且有很多列,所以我不想THING
从数据库中拉下所有实体来实现这个逻辑,因为它不会是高性能的。限制THING_CATEGORY
结果的逻辑必须在可以优化的数据库内部完成。事实上,当我使用原始 PL/SQL 进行查询时,几乎需要一秒钟才能得到结果。
给出实体的概念(请注意,THING_CATEGORY
没有对 的引用THING
):
@Entity @Table(name = "THING")
public class Thing
{
private String categoryCode;
@Column(name = "CATEGORY_CODE", nullable = false, length = 3)
public String getCategoryCode() { return this.categoryCode; }
private String countryCode;
@Column(name = "COUNTRY_CODE", nullable = false, length = 2)
public String getCountryCode() { return this.countryCode; }
...
}
@Entity @Table(name = "THING_CATEGORY")
public class ThingCategory
{
private String code;
@Id @Column(name = "CODE", unique = true, nullable = false, length = 3)
public String getCode() { return this.code; }
...
}