【发布时间】:2021-10-19 14:08:53
【问题描述】:
我有一个表 Prod,它与表 User 有 3 个 fk 关系:
Prod
-----
id
user_id_1
user_id_2
user_id_3
User
-----
id
firstname
lastname
鉴于搜索表单上可能存在 firstname> 和 lastname>,我想做类似(伪代码)的操作:
Find all Prod
where
(user_id_1.firstname like <firstname> AND user_id_1.lastname like <lastname>) OR
(user_id_2.firstname like <firstname> AND user_id_2.lastname like <lastname>) OR
(user_id_3.firstname like <firstname> AND user_id_3.lastname like <lastname>)
使用 Hibernate 的 Criteria 对象,我相信执行关联表操作的方法是使用额外的 Criteria 对象:
Criteria prodCriteria = session.createCriteria(Prod.class);
Criteria user1Criteria = prodCriteria.createCriteria("userId1");
LogicalExpression user1Le = Restrictions.and(Restrictions.ilike("firstame", <firstname>, MatchMode.ANYWHERE), Restrictions.ilike("lastname", <lastname>, MatchMode.ANYWHERE));
user1Criteria.add(user1Le);
Criteria user2Criteria = prodCriteria.createCriteria("userId2");
LogicalExpression user2Le = Restrictions.and(Restrictions.ilike("firstame", <firstname>, MatchMode.ANYWHERE), Restrictions.ilike("lastname", <lastname>, MatchMode.ANYWHERE));
user2Criteria.add(user2Le);
Criteria user3Criteria = prodCriteria.createCriteria("userId3");
LogicalExpression user3Le = Restrictions.and(Restrictions.ilike("firstame", <firstname>, MatchMode.ANYWHERE), Restrictions.ilike("lastname", <lastname>, MatchMode.ANYWHERE));
user3Criteria.add(user3Le);
但是,这不会在我想要 OR 的关联 sub-criteria 对象之间产生 AND 吗?
有没有办法在 sub-criteria 对象之间执行 OR?我这样做是否正确?
【问题讨论】:
标签: java hibernate hibernate-criteria