У меня проблемы с запуском запроса в 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]
Я что-то упустил? Большое спасибо.