【发布时间】:2011-12-29 08:17:10
【问题描述】:
我在用户和项目之间存在“多对多”关系:
用户类别:
@ManyToMany ( fetch = FetchType.EAGER )//Tipo de busqueda
@JoinTable(name="USERPROJECTS" //Tabla de intercambio
, joinColumns={@JoinColumn(name="IDUSER") //Llave foránea
}
, inverseJoinColumns={@JoinColumn(name="IDPROJECT") //Llave foránea
})
@Where( clause = "DELETIONDATE is null" )
private List<Project> projects;
项目类:
@ManyToMany(cascade=CascadeType.ALL) //Tipo de busqueda
@JoinTable(name="USERPROJECTS" //Tabla de intercambio
, joinColumns={@JoinColumn(name="IDPROJECT") //Llave foránea
}
, inverseJoinColumns={@JoinColumn(name="IDUSER") //Llave foránea
})
@Where( clause = "DELETIONDATE is null" )
private List<PacoUser> users;
我需要创建一个条件来获取一些用户,其中一个条件是用户参与了一个或多个项目(这是一个搜索过滤器,所以将来会动态添加这个限制)。我就是这样尝试的:
Criteria criteria = session.createCriteria(User.class);
criteria.add(Restrictions.isNull(COLUMN_DELETIONDATE));
criteria.add(Restrictions. ......);
....
criteria.add(Restrictions.in("projects", (List<Project>)projects));
and projects 包含应该在 IN 子句中的项目。
但是我变成了下一个SQLException:
org.hibernate.exception.GenericJDBCException 无法执行查询 SQL 选择 this_.id 作为 id1_7_, this_.deletionDate 作为删除2_1_7_, this_.email 作为 email1_7_, this_.lastNames 作为 lastNames1_7_, this_.name 作为 name1_7_, this_.newPasswordRequested 作为 newPassw6_1_7_, this_.IDORGANIZATION 作为 IDORGAN10_1_7_, this_.password 作为密码1_7_, this_ .role 为 role1_7_,this_.userName 为 userName1_7_,organizati2_.id 为 id0_0_,organizati2_.certifications 为 certific3_0_0_,organizati2_.comContact 为 comContact0_0_,organizati2_.comEmail 为 comEmail0_0_,organizati2_.comPhone 为 comPhone0_02,删除为.7_organizatiD_0_.de as name0_0_,organizati2_.techContact as techCont9_0_0_,organizati2_.techEmail 作为 techEmail0_0_,organizati2_.techPhone 作为 techPhone0_0_,organizati2_.address 作为 address0_0_,organizati2_.cif 作为 cif0_0_,organizati2_.DTYPE 作为 DTYPE0_0_,projects3_.IDUSER 作为 IDPRO_9_,project4 , project4_.id 为 id3_1_, project4_.complianceRequestingReason 为 complian2_3_1_, project4_.complianceResolutionReason 为complian3_3_1_,project4_.deletionDate如deletion4_3_1_,project4_.description如descript5_3_1_,project4_.expedientNo如expedien6_3_1_,project4_.finishDate如finishDate3_1_,project4_.lastVersionForCompliance_id如lastVer12_3_1_,project4_.name如name3_1_,project4_.IDORGANIZATION如IDORGAN13_3_1_,project4_.IDPOLICY如IDPOLICY3_1_, project4_.startDate 作为 startDate3_1_, project4_.state 作为 state3_1_, project4_.tentativeFinishDate 作为 tentati11_3_1_, version5_.id 作为 id8_2_, version5_.classes 作为 classes8_2_, version5_.CREATORID 作为 CREATORID8_2_, version5_.description 作为 descript3_8_2_, version5_.errorReport 作为 errorRep4_8_2_,函数为 functions8_2_,version5_.highSeverityErrorCount 作为 highSeve6_8_2_,version5_.internalFileName 作为 internal7_8_2_,version5_.javadocs 作为 javadocs8_2_,version5_.javadocsLines 作为 javadocs9_8_2_,version5_.lineCount 作为 lineCount8_2_,version5_.lowSeverityErrorCount 作为 lowSeve11_8_2_,version5_.mediumSeverityErrorCount 作为 medium12_8 ersion5_.multipleComment as multipl13_8_2_, version5_.name as name8_2_, version5_.observations as observa15_8_2_, version5_.packages as packages8_2_, version5_.PROJECTID as PROJECTID8_2_, version5_.reviewDate as reviewDate8_2_, version5_.singleComment as singleC18_8_2_, version5_6_state as state. id 为 id1_3_,pacouser6_.deletionDate 为 delete2_1_3_,pacouser6_.email 为 email1_3_,pacouser6_.lastNames 为 lastNames1_3_,pacouser6_.name 为 name1_3_,pacouser6_.newPasswordRequested 为 newPassw6_1_3_,pacouser6_.IDORGANIZATION 为 IDORGAN10_1_3_,pacouser6_1_3_,pacouser pacouser6_1_3_ 为密码,6 role1_3_,pacouser6_.userName如userName1_3_,project7_.id如id3_4_,project7_.complianceRequestingReason如complian2_3_4_,project7_.complianceResolutionReason如complian3_3_4_,project7_.deletionDate如deletion4_3_4_,project7_.description如descript5_3_4_,project7_.expedientNo如expedien6_3_4_,project7_.finishDate如finishDate3_4_, project7_.lastVersionForComplianc e_id 作为 lastVer12_3_4_,project7_.name 作为 name3_4_,project7_.IDORGANIZATION 作为 IDORGAN13_3_4_,project7_.IDPOLICY 作为 IDPOLICY3_4_,project7_.startDate 作为 startDate3_4_,project7_.state 作为 state3_4_,project7_.tentativeFinishDate 作为 tentati11_3_4_,organizati_3_4_,作为 508_.id 作为 certificationid certific3_0_5_,organizati8_.comContact如comContact0_5_,organizati8_.comEmail如comEmail0_5_,organizati8_.comPhone如comPhone0_5_,organizati8_.deletionDate如deletion7_0_5_,organizati8_.name如name0_5_,organizati8_.techContact如techCont9_0_5_,organizati8_.techEmail如techEmail0_5_,organizati8_.techPhone如techPhone0_5_, organizati8_.address 作为address0_5_,organizati8_.cif 作为cif0_5_,organizati8_.DTYPE 作为DTYPE0_5_,policy9_.id 作为id2_6_,policy9_.criticalViolations 作为critical2_2_6_,policy9_.deletionDate 作为deletion3_2_6_,policy9_.description 作为descript4_2_6_,policy9_.majorViolations_ 作为majorVio5_2_,policy9_.majorViolations_9.majorVio5_2_次要违规为 minorVio6_2_6_,policy9_.name 为来自 PacoUser 的 name2_6_ this_ left outer join Organizationorganizati2_ on this_.IDORGANIZATION=organizati2_.id left outer join USERPROJECTS projects3_ on this_.id=projects3_.IDUSER left outer join Project project4_ on projects3_.IDPROJECT=project4_.id 和( project4_.DELETIONDATE 为空) 左外连接版本 5_ on project4_.lastVersionForCompliance_id=version5_.id 左外连接 PacoUser pacouser6_ on version5_.CREATORID=pacouser6_.id 左外连接 Project project7_ on version5_.PROJECTID=project7_.id 左外连接 Organizationorganizati8_ on project7_.IDORGANIZATION= organizati8_.id 在 project7_.IDPOLICY=policy9_.id 上左外连接 Policy policy9_ 其中 this_.deletionDate 为 null 且 this_.id 在 (?) 错误代码 17041 java.sql.SQLException Falta el parametro IN o OUT en el índice:: 1 -- 这意味着:索引 1 中缺少 In 或 OUT 参数。任何见解?有人能帮我吗?我做错了什么?
提前非常感谢您!!!
【问题讨论】:
-
为什么不使用项目的 id 而不是项目对象列表,可以使用 Restrictions.PropertyIn("this.Id", new List
{//list of ids}); -
嗨,我没有找到方法“Restrictions.PorpertyIn”,也无法使用 Restrictions.in("this.is",问题是我正在使用“ User.class”,所以即使它会返回结果,这些也不正确,因为 this.id 不会引用项目而是用户。我已经尝试过 Restrictions.in("projects.id" 。 .. 和 Restrictions.in("project.id" 但它说这个变量不存在:( ...谢谢你的回答!!;)
-
我已经拿到了!!万一有人也需要它,解决方案是:criteria.createCriteria("projects", Criteria.INNER_JOIN).add(Restrictions.in("id",ids));
-
你可以回答你自己的问题并接受答案!!
-
好的!谢谢!我明天再做 --> 哎呀!无法提交您的答案,因为:声誉低于 100 的用户在提问后 8 小时内无法回答自己的问题。您可以在 1 小时内自行回答。在此之前,请使用 cmets,或改为编辑您的问题。
标签: hibernate many-to-many criteria