Java 休眠:使用条件按列表筛选

Java 休眠:使用条件按列表筛选,java,hibernate,criteria,Java,Hibernate,Criteria,我有一个医生。每个医生都有一份健康保险清单,这是另一个实体 我的目标是建立一个基于用户选择的健康保险的搜索系统。我必须让所有在用户健康保险列表中至少有1个健康保险的医生都参加。大概是这样的: Criteria criteria = session.createCriteria(Doctor.class); criteria.add(Restrictions.in("healthInsurances", userHealthInsurances)); return criteria.list();

我有一个医生。每个医生都有一份健康保险清单,这是另一个实体

我的目标是建立一个基于用户选择的健康保险的搜索系统。我必须让所有在用户健康保险列表中至少有1个健康保险的医生都参加。大概是这样的:

Criteria criteria = session.createCriteria(Doctor.class);
criteria.add(Restrictions.in("healthInsurances", userHealthInsurances));
return criteria.list();
但是这段代码引发了以下异常:java.sql.SQLException:没有为参数1指定值

是否有任何方法可以使用标准来实现这一点

Criteria criteria = session.createCriteria(Doctor.class);
criteria.createCriteria("healthInsurances").add(Restrictions.in("id", userSelectedIds));
return criteria.list();

您可以通过
createAlias
获得相同的功能。请看更多示例。

它起作用了,谢谢。当我展示一个实体列表而不是ID列表时,是否有任何方法可以在不生成id列表的情况下执行相同的操作?如果使用id覆盖
HealthInsurance
对象的
equals
hashCode
方法,并将
userHealthInsurances
列表作为
方法中的
参数传递,则可能会起作用;但对此不确定;)你是说像我在问题中提出的那样?当我这样做时,我得到了我说的错误(java.sql.SQLException:没有为参数1指定值)。如果保留您所说的内容,但将“UserSelectedDS”更改为“userHealthInsurances”,我会得到以下错误:java.lang.ClassCastException:HealthInsurance不能转换为Long。我是指第二个(您得到了ClassCastException),结果它不起作用。