如何将@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