java - JPA 查询:java.lang.IllegalArgumentException:提供了至少 1 个参数,但查询中仅存在 0 个参数
问题描述
当我想通过 userId 查询最年轻的(按日期)记录且 userId 不为空时,会引发异常。此方法编写正确还是有错误?
我有以下组件:
存储库
public interface CustomEventStorage extends JpaRepository<CustomEventData, CustomEventDataId> {
CustomEventData findFirstByUserIdNotNullOrderByIdDateDesc(@Param("userId") String userId);
}
实体
@Entity
@Table(name = "event")
public class CustomEventData {
@EmbeddedId
private CustomEventDataId id;
@Column(name = "state")
@Enumerated(EnumType.STRING)
private EventState state;
@Column(name = "user_id")
private String userId;
可嵌入 ID
@Embeddable
public class CustomEventDataId implements Serializable {
@Column(name = "event_id")
private String eventId;
@Column(name = "date")
private LocalDateTime date;
例外
引起:java.lang.IllegalArgumentException:至少提供了 1 个参数,但查询中只存在 0 个参数。在 org.springframework.util.Assert.isTrue(Assert.java:136) ~[spring-core-5.1.7.RELEASE.jar:5.1.7.RELEASE] 在 org.springframework.data.jpa.repository.query。 QueryParameterSetterFactory$CriteriaQueryParameterSetterFactory.create(QueryParameterSetterFactory.java:291) ~[spring-data-jpa-2.1.8.RELEASE.jar:2.1.8.RELEASE] at org.springframework.data.jpa.repository.query.ParameterBinderFactory.lambda $createQueryParameterSetter$1(ParameterBinderFactory.java:139) ~[spring-data-jpa-2.1.8.RELEASE.jar:2.1.8.RELEASE] at java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:193 ) ~[na:1.8.0_242] at java.util.Spliterators$ArraySpliterator.tryAdvance(Spliterators.java:958) ~[na:1.8.
解决方案
JPA 在查询中没有期望userId
,因为您在查询中使用UserIdNotNull
了 which 的意思user_id IS NOT NULL
which don't expect userId
。使用这种方式userId
CustomEventData findFirstByUserIdOrderByIdDateDesc(@Param("userId") String userId);
您不需要检查 not null 因为您正在传递 userId。
推荐阅读
- javascript - Javascript 在 Firefox 中扮演多头角色
- ruby-on-rails - rails 一个由两个控制器处理的搜索字段
- python - 使用 Python 使用多个正则表达式进行列表理解
- java - 当 JAVA_HOME 的确切路径在同一个地方工作时,为什么 JAVA_HOME 在 Path 中失败?
- reactjs - 更改字体系列 Material-UI
- ruby-on-rails - Vue-Multiselect显示对象而不是“名称”字段
- html - 输入电话号码验证模式
- javascript - 添加css以将表格格式化为网格
- javascript - 如何让onclick显示php文件的内容
- python - 如何创建表并选择数据库中的任何列?