用于 JPA 排序的 Hibernate @Formula 延迟加载

Hibernate @Formula lazy-loading for JPA Sort

我有带 @Formula 字段的实体,其中包含 select 表达式。然后我将该字段称为 Hibernate 元模型的字符串属性,并在 Sort.by() 中使用它,因此在 PageRequest.of() 方法中使用它。它工作得很好,直到我添加 @Basic(fetch = FetchType.Lazy),之后我得到 Caused by: org.postgresql.util.PSQLException: ERROR: for SELECT DISTINCT, ORDER BY expressions must appear in select listo.h.engine.jdbc.spi.SqlExceptionHelper : SQL Error: 0, SQLState: 42P10

我到底做错了什么?

P. S. 我已经使用 enableLazyInitialization = true 打开了休眠增强功能(据我所知,否则 @Formula 字段的延迟加载将不起作用)

字段代码如下所示:

    @Formula("(SELECT st.fio " +
            "FROM conjunction_table ct " +
            "JOIN second_table st ON st.id = ct.second_table_id " +
            "WHERE ct.first_table_id = id " +
            "ORDER BY st.fio " +
            "LIMIT 1)")
    @Basic(fetch = FetchType.LAZY)
    private String secondTableFio;

惰性抓取不包括 SELECT DISTINCT 子句中的计算 属性,这会导致此错误,因为 ORDER BY 中现在有一个 属性子句,未选中。

这是受 postgres 限制的,因为 DISTINCT 可以从结果中删除重复的行,这些行实际上可能具有不同的 ORDER BY 值,因此无法决定如何对所选行进行排序: PG::Error: SELECT DISTINCT, ORDER BY expressions must appear in select list