如何在 Spring 数据 JDBC 中的 CrudRepository 查询中引用实体?
How to reference entity in Query in CrudRepository in Spring Data JDBC?
我想使用 Spring Data CrudRepository 和 findWithTitle()
方法从数据库中获取实体,如下所示:
interface TasksCrudRepository extends CrudRepository<Task, Long> {
@Query(value = "SELECT t FROM Task t WHERE t.title IS NOT NULL")
List<Task> findWithTitle();
}
但是我明白了
org.h2.jdbc.JdbcSQLSyntaxErrorException: Column "T" not found; SQL statement:
SELECT t FROM Task t [42122-199]
我找不到发生这种情况的原因。据我所知,这种语法应该按预期工作。
这是任务实体的样子:
@Data
@Table("task")
@AllArgsConstructor
public class Task {
@Id
private Long id;
private String title;
private String description;
private Set<Attachment> attachments;
private Set<TagRef> tagRefs;
@CreatedDate
private LocalDateTime createdAt;
@LastModifiedDate
private LocalDateTime updatedAt;
}
这是它的架构:
CREATE TABLE task
(
id IDENTITY,
title VARCHAR(100),
description VARCHAR(1024),
created_at TIMESTAMP,
updated_at TIMESTAMP,
);
也许这会对你有所帮助,
COLUMN_NOT_FOUND_1 = 42122
引用不存在的列时会抛出代码为 42122 的错误。
例子:
创建 TABLE 测试(ID INT);
SELECT 来自测试的名称;
使用预定义的 Spring JPA 方法代替自定义查询。
请尝试以下方法。
interface TasksCrudRepository extends CrudRepository<Task, Long> {
List<Task> findByTitleNotNull();
}
修改完成:
- 删除了查询干扰
- 重命名方法以匹配 JPA 标准预定义服务
解决方案是使用 @deHaar 提到的星号:
@Query("SELECT * FROM Task t ...")
List<Task> findTasks();
}
此外,如果你想执行 JOIN 查询,也可以 运行 加上星号:
@Query("SELECT * FROM Task t JOIN Attachment a ON t.id = a.task")
List<Task> findWithAttachments();
我想使用 Spring Data CrudRepository 和 findWithTitle()
方法从数据库中获取实体,如下所示:
interface TasksCrudRepository extends CrudRepository<Task, Long> {
@Query(value = "SELECT t FROM Task t WHERE t.title IS NOT NULL")
List<Task> findWithTitle();
}
但是我明白了
org.h2.jdbc.JdbcSQLSyntaxErrorException: Column "T" not found; SQL statement:
SELECT t FROM Task t [42122-199]
我找不到发生这种情况的原因。据我所知,这种语法应该按预期工作。
这是任务实体的样子:
@Data
@Table("task")
@AllArgsConstructor
public class Task {
@Id
private Long id;
private String title;
private String description;
private Set<Attachment> attachments;
private Set<TagRef> tagRefs;
@CreatedDate
private LocalDateTime createdAt;
@LastModifiedDate
private LocalDateTime updatedAt;
}
这是它的架构:
CREATE TABLE task
(
id IDENTITY,
title VARCHAR(100),
description VARCHAR(1024),
created_at TIMESTAMP,
updated_at TIMESTAMP,
);
也许这会对你有所帮助, COLUMN_NOT_FOUND_1 = 42122 引用不存在的列时会抛出代码为 42122 的错误。 例子: 创建 TABLE 测试(ID INT); SELECT 来自测试的名称;
使用预定义的 Spring JPA 方法代替自定义查询。
请尝试以下方法。
interface TasksCrudRepository extends CrudRepository<Task, Long> {
List<Task> findByTitleNotNull();
}
修改完成:
- 删除了查询干扰
- 重命名方法以匹配 JPA 标准预定义服务
解决方案是使用 @deHaar 提到的星号:
@Query("SELECT * FROM Task t ...")
List<Task> findTasks();
}
此外,如果你想执行 JOIN 查询,也可以 运行 加上星号:
@Query("SELECT * FROM Task t JOIN Attachment a ON t.id = a.task")
List<Task> findWithAttachments();