Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何在eclipselink@Query注释中使用表达式(SpEL)?_Java_Spring_Eclipselink_Spring Data - Fatal编程技术网

Java 如何在eclipselink@Query注释中使用表达式(SpEL)?

Java 如何在eclipselink@Query注释中使用表达式(SpEL)?,java,spring,eclipselink,spring-data,Java,Spring,Eclipselink,Spring Data,如何在Spring Data JPA repository方法的@query方法中的JPA查询中添加条件where子句 比如说, @Query("select student from Student student #{:rollNumber == '123' ? 'where student.rollNumber > 123' : ''} ") List<Student> findStudents(@Param("rollNumber") int rollNumber)

如何在Spring Data JPA repository方法的@query方法中的JPA查询中添加条件where子句

比如说,

@Query("select student from Student student #{:rollNumber == '123' ? 'where student.rollNumber > 123' : ''} ")
List<Student> findStudents(@Param("rollNumber") int rollNumber)
我得到以下例外情况:-

Caused by: Exception [EclipseLink-0] (Eclipse Persistence Services - 2.5.2.v20140319-9ad6abd): org.eclipse.persistence.exceptions.JPQLException
Exception Description: Syntax error parsing [select student from Student student #{:rollNumber == '123' ? 'where student.rollNumber > 123' : ''} ]. 
[62, 63] The FROM clause has 'Student student' and '#{:rollNumber =' that are not separated by a comma.
[104, 105] The identification variable '=' cannot be a reserved word.
[105, 172] The query contains a malformed ending.
    at org.eclipse.persistence.internal.jpa.jpql.HermesParser.buildException(HermesParser.java:155)
    at org.eclipse.persistence.internal.jpa.jpql.HermesParser.validate(HermesParser.java:334)
    at org.eclipse.persistence.internal.jpa.jpql.HermesParser.populateQueryImp(HermesParser.java:278)
    at org.eclipse.persistence.internal.jpa.jpql.HermesParser.buildQuery(HermesParser.java:163)
    at org.eclipse.persistence.internal.jpa.EJBQueryImpl.buildEJBQLDatabaseQuery(EJBQueryImpl.java:142)
    at org.eclipse.persistence.internal.jpa.EJBQueryImpl.buildEJBQLDatabaseQuery(EJBQueryImpl.java:116)
    at org.eclipse.persistence.internal.jpa.EJBQueryImpl.<init>(EJBQueryImpl.java:102)
    at org.eclipse.persistence.internal.jpa.EJBQueryImpl.<init>(EJBQueryImpl.java:86)
    at org.eclipse.persistence.internal.jpa.EntityManagerImpl.createQuery(EntityManagerImpl.java:1603)
    ... 74 more

我不确定spring数据当前是否将查询参数注入SpeL解析器。 您可以尝试以下方法:

@Query("select student from Student student where :rollNumber==123 or student.rollNumber > 123 ")
List<Student> findStudents(@Param("rollNumber") int rollNumber)

您需要使用?1将rollNumber注入查询。?1或:paramName是一个相同的东西。Spring支持命名参数。这不会返回卷号小于123的学生。当rollNumber为123时,我需要完整的列表。如果您使用123作为参数计算函数,则roll numberIt的任何其他条件都会重新计算所有学生。比较where子句第一部分的参数和常量的小技巧。若参数不是123,那个么它将为您提供rollNumber>123的所有学生。不是很优雅的解决方案。它应该在1.7.2之后出现-