Hibernate标准对多级联接的限制

时间:2017-12-20 12:18:31

标签: java mysql hibernate hql hibernate-criteria

我有3张桌子。用户,管理员和分支机构。在用户表中,有一些用户具有管理员角色。每个管理员用户在AdminDetails表中都有一对一的映射关键字。使用实体名称为admin的User表中的自映射,使用1个管理员映射所有用户。 AdminDetails与Branch表具有多对一关系。

Bottomline,我的映射看起来像这样:

User (Many to One) > User as admin (One to one)> Admin Details (Many to one) > Branch

现在,我需要做的是找到特定分支下的所有用户。为此,我试图使用休眠标准功能。

方法1

我尝试使用映射直接添加限制。它适用于单级映射但不超过它。例如:

// This is working
Criteria userCriteria=session.createCriteria(User.class);
userCriteria.add(Restrictions.eq("admin.id",3));

// This is not
Criteria userCriteria=session.createCriteria(User.class);
userCriteria.add(Restrictions.eq("admin.adminDetails.id",3));

方法2

//我正在创建子标准并尝试对它们应用限制。

Criteria userCriteria=session.createCriteria(User.class);
Criteria adminCriteria=userCriteria.createCriteria("admin");
Criteria adminDetailsCriteria=adminCriteria.createCriteria("adminDetails");
Criteria branchCriteria=adminDetailsCriteria.createCriteria("branch");
branchCriteria.add(Restrictions.eq("id",1));
List<User> users=userCriteria.list();

这是抛出错误

No row with the given identifier exists:com.myapp.dao.AdminDetails#3

我最好的猜测是,并非所有用户都在AdminDetails表中包含一行。只有具有Admin角色的用户在那里包含一行,但是hibernate试图为每个用户找到导致上述错误的一行。

有没有其他方法可以获得理想的结果?或者我做错了什么?

0 个答案:

没有答案
相关问题