提问者:小点点

在Spring boot中将参数绑定到@Subselect注释内的sql请求?


我正在做一个项目,在这个项目中,我需要将参数传递给spring boot的< code>@subselect注释(将请求映射到实体),如下例所示:

@Entity
@Immutable
@Subselect("SELECT FROM Employe INNER JOIN Employe_adress ON Employe.id = Employe_adress.eid WHERE Employe_adress.aid=?x")
public class Employe {
...
}

我想将一个外部值绑定到“x”变量。非常感谢。

编辑:我发现的一种方法是添加一个全局变量,但是“注释属性的值必须是一个常量表达式”。


共1个答案

匿名用户

可以使用@FilterDef和@Filter:https://www.baeldung.com/hibernate-dynamic-mapping#parameterized-用过滤器过滤

为了演示@Filter的工作原理,我们首先将以下筛选器定义添加到Employee实体中:

@FilterDef(
    name = "incomeLevelFilter", 
    parameters = @ParamDef(name = "incomeLimit", type = "int")
)
@Filter(
    name = "incomeLevelFilter", 
    condition = "grossIncome > :incomeLimit"
)
public class Employee implements Serializable {

< code>@FilterDef注释定义了过滤器名称及其将参与查询的一组参数。参数的类型是Hibernate类型之一的名称(type、UserType或CompositeUserType),在我们的例子中是一个int。

@FilterDef注释可以放置在类型或包级别。请注意,它没有指定过滤条件本身(尽管我们可以指定 defaultCondition 参数)。

这意味着我们可以在一个地方定义过滤器(其名称和参数集),然后在多个其他地方不同地定义过滤器的条件。

这可以通过@Filter注释来完成。在我们的例子中,为了简单起见,我们把它放在同一个类中。条件的语法是参数名称前面带有冒号的原始 SQL。

相关问题