gpt4 book ai didi

java - 如何使用 Hibernate Criteria 查询嵌套表?

转载 作者:塔克拉玛干 更新时间:2023-11-01 22:50:49 25 4
gpt4 key购买 nike

我已经查看了所有 SO 和 Google,但我想我没有使用正确的搜索词或其他东西。

无论如何,假设我有三个表:

Companies
-----------------------------------------
id
name
user_id

Users
-----------------------------------------
id
username
usertype_id

UserTypes
-----------------------------------------
id
typeofuser

因此 ACME 将是一家公司,它将有一个用户 Moe,而 Moe 将是 Stooge 的用户类型。

在 SQL 中,我会做类似的事情:

select
*
from companies c
join users u on (u.id = c.user_id)
join usertypes ut on (ut.id = u.usertype_id)
where
ut.typeofuser = 'Stooge'

但我似乎无法弄清楚如何在标准中做到这一点。我试过:

Criteria crit = io.getSession().createCriteria(Company.class);
List<Company> list =
crit.createCriteria("users")
.createCriteria("usertypes")
.add(Restriction.eq("typeofuser", "Stooge").list();

但是我得到的记录太多了。结果甚至都不准确。

我也试过:

Criteria crit = io.getSession().createCriteria(Company.class);
List<Company> list =
crit.createAlias("users", "u")
.createAlias("u.usertypes", "ut")
.add(Restriction.eq("ut.typeofuser", "Stooge").list();

似乎带回了完全相同的结果集。我实际上已经阅读了用户手册。当我只嵌套一层深时(即,用户搜索很好)但是当我嵌套两层深时,我就不太明白了。手册没有帮助。我只是无法将猫和小猫与业务对象联系起来。也许他们应该使用猫、小猫和跳蚤? :-/

感谢您的任何建议。

最佳答案

虽然您的查询应该有效,但下面是另一种变体:

 Criteria crit = io.getSession().createCriteria(Company.class);
List<Company> list =
crit.createAlias("users", "u")
.createAlias("u.usertypes", "ut", Criteria.INNER_JOIN,
Restrictions.eq("ut.typeofuser", "Stooge")
.list();

关于java - 如何使用 Hibernate Criteria 查询嵌套表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13316992/

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