首页 > 解决方案 > QuerySyntaxException:期待关闭,在第 1 行附近发现“空”

问题描述

我在使用 Hibernate 运行查询时遇到了一些麻烦。给定以下实体...

@Getter
@EqualsAndHashCode
@ToString
@Entity
@Table(name = "configuration")
@IdClass(ConfigurationPk.class)
@EntityListeners(AuditingEntityListener.class)
public class Configuration implements Persistable<UUID> {

    @Id
    @Column(name = "id", nullable = false, updatable = false)
    @NotNull
    @Setter
    private UUID id;

    @Id
    @Column(name = "version", nullable = false, updatable = false)
    @NotNull
    @Setter
    private int version;

    @Column(name = "close_date")
    @Setter
    private LocalDateTime closeDate;

    @Column(name = "definition")
    @Lob
    @Setter
    private String definition;

    public boolean isNew() {
        return closeDate == null;
    }
}

...以及以下复合主键:

@AllArgsConstructor
@NoArgsConstructor
@EqualsAndHashCode
@ToString
public class ConfigurationPk implements Serializable {

    private UUID id;
    private int version;
}

我试图将自定义查询与该findAll方法相关联:

@Repository
public interface ConfigurationRepository extends JpaRepository<Confguration, UUID> {
    ...

    @Query(value = "SELECT c FROM Configuratin c"
      + " WHERE c.closeDate IS NULL"
      + " AND (c.id, c.version) IN (SELECT c.id, MAX(c.version) AS version"
      + " FROM Configuration c GROUP BY c.id ORDER BY c.id)", nativeQuery = true)
    List<Configuration> findAll();
}

上面的查询对我来说看起来不错......但是如果我们查看错误消息,似乎缺少最后的右括号:

org.hibernate.hql.internal.ast.QuerySyntaxException: expecting CLOSE, found 'null' near line 1, column 281 [select count(q) FROM com.avaloq.awp.profiling.persistence.model.questionnaire.QuestionnairePo q WHERE q.closeDate IS NULL AND (q.id, q.version) IN (SELECT q.id, MAX(q.version) AS version FROM com.avaloq.awp.profiling.persistence.model.questionnaire.QuestionnairePo q GROUP BY q.id]

我错过了什么吗?非常感谢。

标签: spring-data-jpa

解决方案


推荐阅读