实体如下所示:
@Getter
@Setter
@Entity
public class Application {
@Id
private Long id;
@Enumerated(EnumType.STRING)
private ApplicationStatus status;
}
代码是这样工作的:
public interface ApplicationRepository extends JpaRepository<Application, Long> {
@Query("SELECT app FROM #{#entityName} AS app WHERE app.status LIKE :status")
List<Application> find(@Param("status") ApplicationStatus status);
但是nativeQuery -的相同代码段却没有:
@Query(value = "SELECT app.* FROM application AS app WHERE app.status LIKE :status", nativeQuery = true)
List<Application> findNative(@Param("status") ApplicationStatus status);
}
我没有任何例外,只是空的名单。
如何解决这个问题?是否可以将enum
与nativeQuery
一起使用?
P.S我可以把String
传递到方法中而不是ApplicationStatus
,但也许还有另一种选择?
6条答案
按热度按时间brc7rcf01#
在similar question之后有类似的需求,one of the answers指向Spring Expression Language(SpEL),你可以用途:
以上重要部分为
app.status=:#{#status.name()}
4uqofj5v2#
在@Aivaras上扩展答案:如果你想使用一个状态列表,SpEL表达式略有不同-你需要做一个投影:
注意表达式的变化
3duebb1j3#
我使用
#{#paramName?.name()}
解决了这个问题注意:“?”管理
type
参数为null时的情况。uklbhaso4#
经过几天的错误,我找到了解决方案。
我做了大量的研究,并在许多方面进行了测试,将
@Param("environment") environment: Environment
作为参数接收:Kotlin解决方案
关键字在查询中。必须使用
.name()
将参数的值转换为String(或接收String作为参数),并将String类型的值转换为所需的特定Enum。因为直接在查询中传递Enum类型的对象不起作用。假设数据库中的Enum定义为
environment
。区分:
spring #jpa #postgresql #Kotlin
kqhtkvqz5#
你可以在传递参数之前转换为字符串。
imzjd6km6#
这个怎么样?