Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 获取最小值的HQL_Java_Mysql_Hibernate_Jpa_Hql - Fatal编程技术网

Java 获取最小值的HQL

Java 获取最小值的HQL,java,mysql,hibernate,jpa,hql,Java,Mysql,Hibernate,Jpa,Hql,我有以下实体: 公司类别: public class Company { @JoinTable(name = "company_employee", joinColumns = @JoinColumn(name = "company_id") , inverseJoinColumns = @JoinColumn(name = "employee_id") ) @ManyToMany(fetch = FetchType.LAZY) private Set<Employ

我有以下实体:

公司类别:

public class Company {
    @JoinTable(name = "company_employee", joinColumns = @JoinColumn(name = "company_id") , inverseJoinColumns = @JoinColumn(name = "employee_id") )
    @ManyToMany(fetch = FetchType.LAZY)
    private Set<Employee> employees;

@OneToMany(fetch = FetchType.LAZY, cascade = CascadeType.ALL, orphanRemoval = true, mappedBy = "company")
private List<Score> scores;

    @JoinTable(name = "company_factor", joinColumns = @JoinColumn(name = "company_id") , inverseJoinColumns = @JoinColumn(name = "factor_id") )
    @ManyToOne(fetch = FetchType.LAZY)
    private Factor factors;
}
若我得到列表,它将是公司和员工实例的组合列表,有时公司或员工可以重复。 目标是获取列表,按员工中的系数进行过滤,并仅显示按升序排序的每个员工的最低分数。 比如说,如果存在组合

employee1-company1, score=1
employee1-company2, score=2
employee2-company1, score=3
employee2-company4, score=5
employee3-company4, score6
结果列表应如下所示:

employee1-company1, score=1
employee2-company1, score=3
employee3-company4, score=6
所以员工不应该重复,但公司可以在列表中重复。 我不太清楚,怎么做。我取得的成绩是按升序显示独特的结果,但它们不显示最小分数。我使用了HQL:

    select distinct e from Score e 
left outer join fetch e.company 
left outer join fetch e.company.factors 
left outer join fetch e.employee 
left outer join fetch e.employee.factors ef 
where ef.factor_id=:factor_id 
group by e.employee.employee_id 
order by e.score asc
谁能帮助我实现我所需要的?多谢各位

更新1:

我决定走另一条路。 现在,我使用以下查询通过员工获取:

select distinct e from Employee e join e.scores es order by es.score asc

看起来这正是我需要的,但是如何在查询中将最低es.score放入
Employee
object的字段得分?也许有某种方法可以将
e.score
替换为
es.score

您可以使用以下方法:

Select a from (Select b from Score b order by score) as a group by a.employee
说明:

  • 按分数顺序从分数b中选择b
    :按分数的asc(默认)顺序获取结果

  • 根据上述结果分组将给出唯一的员工


您可以使用以下功能:

Select a from (Select b from Score b order by score) as a group by a.employee
说明:

  • 按分数顺序从分数b中选择b
    :按分数的asc(默认)顺序获取结果

  • 根据上述结果分组将给出唯一的员工


作为解决方案,我切换到了
entityManager.createNativeQuery(“一些本机sql字符串”)
。 我对结果感到满意。就本例而言,关于SQL查询的问题是
唯一的缺点是不可能使用
连接获取
,因此这里存在N+1选择问题,但我计划获取相当小的数据块,因此可以接受

作为解决方案,我切换到了
entityManager.createNativeQuery(“一些本机sql字符串”)
。 我对结果感到满意。就本例而言,关于SQL查询的问题是
唯一的缺点是不可能使用
连接获取
,因此这里存在N+1选择问题,但我计划获取相当小的数据块,因此可以接受

在JPA中,您不能这样做,因为您不能将子查询作为FROM。谢谢,但是它不起作用,因为
是意外标记:
org.springframework.dao.InvalidDataAccessApiUsageException:org.hibernate.hql.internal.ast.QuerySyntaxException:unexpected标记:
仅用于以下情况:我在
entityManager.createQuery()中使用它)
在JPA中不可以,因为您不能将子查询作为FROM。谢谢,但是它不起作用,说
是意外标记:
org.springframework.dao.InvalidDataAccessApiUsageException:org.hibernate.hql.internal.ast.QuerySyntaxException:意外标记:
仅用于示例:我在
entityManager.createQuery()中使用它。
Select a from (Select b from Score b order by score) as a group by a.employee