无法通过java springboot中的jpql查询对内部实体进行排序

Unable to sort inner entities through jpql query in java springboot

提问人:Ahmed Yusuf 提问时间:11/16/2023 最后编辑:Georgii LvovAhmed Yusuf 更新时间:11/17/2023 访问量:22

问:

以下是来自我的springboot项目中存储库的jpql查询:

public interface TaskRepository extends JpaRepository<TaskEntity, UUID> {  

@Query("SELECT DISTINCT t FROM TaskEntity t JOIN t.processes p JOIN p.agents a WHERE a.id = :agentId ORDER BY p.iat DESC")
Set<TaskEntity> findTasksByAgentId(UUID agentId); 

}

所需的输出是包含已提供代理 ID 的进程的任务列表。我得到了这个输出,但是我也希望进程按 iat(创建时间)排序。 但是,进程不会按此查询排序。请注意,进程是任务的内部实体,因此部分查询不起作用。ORDER BY p.iat DESC

我也尝试了另一个查询:

@Query("SELECT DISTINCT t FROM TaskEntity t JOIN t.processes p JOIN p.agents a WHERE a.id = :agentId GROUP BY t.id ORDER BY MAX(p.iat) DESC")
Set<TaskEntity> findTasksByAgentId(UUID agentId);   

但输出未排序。

以下是我的任务实体供参考:

public class TaskEntity {

    @Id
    @GeneratedValue(generator = "hibernate-uuid")
    @Type(type = "uuid-char")
    private UUID id;

    private String name;

    private String description;

    @Enumerated
    private StatusEnum status;


    @ManyToMany(mappedBy = "task", fetch = FetchType.EAGER)
    private Set<ProcessEntity> processes;

    @ManyToMany(fetch = FetchType.EAGER)
    @JoinTable(
            name = "task_customer",
            joinColumns = @JoinColumn(name = "task_id"),
            inverseJoinColumns = @JoinColumn(name = "customer_id")
    )
    private Set<CustomerEntity> customers;

    @ManyToMany(fetch = FetchType.EAGER)
    @JoinTable(
            name = "task_agent",
            joinColumns = @JoinColumn(name = "task_id"),
            inverseJoinColumns = @JoinColumn(name = "agent_id")
    )
    private Set<AgentEntity> agents;

    private Date iat;
    private Date uat;

    @PrePersist
    protected void onCreate() {
        iat = new Date();
    }

    @PreUpdate
    protected void onUpdate() {
        uat = new Date();
    }


}
java mysql spring-boot spring-data-jpa

评论


答: 暂无答案