【发布时间】:2019-10-21 07:18:17
【问题描述】:
我想使用 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]
我找不到发生这种情况的原因。据我所知,这种语法应该按预期工作。
这是 Task 实体的样子:
@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,
);
【问题讨论】:
-
也许可以尝试使用
SELECT (t)而不是SELECT t。 -
"SELECT t FROM Task t ..."... 我认为,如果您在表Task中有一个列t,那么"SELECT t.t FROM Task t..."就可以了。顺便说一句,我不会创建与列具有相同名称的表别名。错误消息指出没有列T(大写,为什么?),所以检查是否有。 -
@menteith 没有帮助。
-
@deHaar - 没有这样的专栏。我已经为 Task 添加了架构/实体。
-
你是不是错过了@Entity注解?
标签: java spring spring-data spring-jdbc