如何将@PathVariable 值绑定到Spring boot rest API 中的@Where 子句
How to bind @PathVariable value to @Where clause in Spring boot rest API
我正在控制器中阅读@PathVaraible 并在实体中使用@Where
注释。如果我将硬编码值传递给实体中的 @Where
子句,它工作正常。但是我想将 @PathVariable
中传递的 运行 时间值传递给实体中的@Where。
@GetMapping("/api/v1/course/details/{courseId}")
public List<CourseDto> getcourseDetails(@Valid @PathVariable final String courseId) {
// lines of code
}
@Entity
@Where(clause="course_id=:courseId")
public class CourseEntity{
@NotBlank(message = "Please provide courseId)
@Getter
@Setter
@Column(columnDefinition = "nvarchar(50)",length = 50)
private String courseId;
}
@Repository
public interface MyRepo extends JpaRepository<Course, Integer> {
}
使用此代码我收到错误消息
Incorrect syntax near ':'.
如何修复这个错误。还有其他解决方案吗?
您不能在运行时更改 @Where
子句。如果你想设置一个参数,你可以使用 @Filter
:
@Entity
@FilterDef(
name="courseFilter",
parameters=@ParamDef(
name="courseId",
type="int"
)
)
@Filter(
name="firstAccounts",
condition="course_id=:courseId"
)
public class CourseEntity{
...
}
现在使用 Hibernate ORM 会话或实体管理器,您可以通过以下方式设置参数:
entityManager
.unwrap( Session.class )
.enableFilter( "courseFilter" )
.setParameter( "courseId", ...);
List<CourseEntity> courses = entityManager
.createQuery("from CourseEntity c", CourseEntity.class)
.getResultList();
Hibernate ORM 文档 more details about filtering entities 使用 @Filter
或 @Where
。
我正在控制器中阅读@PathVaraible 并在实体中使用@Where
注释。如果我将硬编码值传递给实体中的 @Where
子句,它工作正常。但是我想将 @PathVariable
中传递的 运行 时间值传递给实体中的@Where。
@GetMapping("/api/v1/course/details/{courseId}")
public List<CourseDto> getcourseDetails(@Valid @PathVariable final String courseId) {
// lines of code
}
@Entity
@Where(clause="course_id=:courseId")
public class CourseEntity{
@NotBlank(message = "Please provide courseId)
@Getter
@Setter
@Column(columnDefinition = "nvarchar(50)",length = 50)
private String courseId;
}
@Repository
public interface MyRepo extends JpaRepository<Course, Integer> {
}
使用此代码我收到错误消息
Incorrect syntax near ':'.
如何修复这个错误。还有其他解决方案吗?
您不能在运行时更改 @Where
子句。如果你想设置一个参数,你可以使用 @Filter
:
@Entity
@FilterDef(
name="courseFilter",
parameters=@ParamDef(
name="courseId",
type="int"
)
)
@Filter(
name="firstAccounts",
condition="course_id=:courseId"
)
public class CourseEntity{
...
}
现在使用 Hibernate ORM 会话或实体管理器,您可以通过以下方式设置参数:
entityManager
.unwrap( Session.class )
.enableFilter( "courseFilter" )
.setParameter( "courseId", ...);
List<CourseEntity> courses = entityManager
.createQuery("from CourseEntity c", CourseEntity.class)
.getResultList();
Hibernate ORM 文档 more details about filtering entities 使用 @Filter
或 @Where
。