【问题标题】:how to find an employee that has salaries with jpa hibernate如何找到具有 jpa hibernate 薪水的员工
【发布时间】:2021-10-29 08:18:23
【问题描述】:

我有一个方法可以返回一个简单的entitymanager.find(id) 的员工,但现在我需要找到一个分配了工资的id 员工,(EmployeeSalary 类是通过OneToMany映射),我应该使用entityManager.find()还是entityManager.createQuery()

@Override
public Optional<Employee> findById(Long emptNo) {
    try {
        return Optional.ofNullable(this.entityManager.find(Employee.class, emptNo));
    } catch (EmptyResultDataAccessException e) {
        return Optional.empty();
    }
}

这是我需要帮助的地方:

@Override
public Optional<Employee> findByIdWithSalary(Long empNo) {
    this.entityManager.createQuery("select (e.empNo,s.salary,s.fromDate,s.toDate) as from employees e, salaries s where e.empNo=s.empNo");
    try {
        return Optional.ofNullable(this.entityManager.find(Employee.class, empNo));
    } catch (EmptyResultDataAccessException e) {
        return Optional.empty();
    }
}    

【问题讨论】:

  • 你的意思是:工资 > 0 的员工?

标签: java spring spring-boot hibernate jpa


【解决方案1】:

您需要像下面这样更改查询。

@Override
public Optional<Employee> findByIdWithSalary(Long empNo) {
    this.entityManager.createQuery("select * from employees e left join e.empNo=s.empNo where s.salary >0");
    try {
        return Optional.ofNullable(this.entityManager.find(Employee.class, empNo));
    } catch (EmptyResultDataAccessException e) {
        return Optional.empty();
    }
}

如果它不起作用,请发送您的实体类。我们也可以这样做。

【讨论】:

  • 问题是我不需要找到属性薪水,我需要找到分配了薪水的员工,这意味着员工有薪水分配给他,然后在薪水到期后,因为为他分配了新的薪水,关系是 OneToMany 单向,在 Employee 类中我有一个 Listsalaries
  • 为此,您需要创建一个查询,因为您需要将员工的最后薪水与当前薪水进行比较。
猜你喜欢
  • 2011-01-30
  • 2020-02-14
  • 1970-01-01
  • 1970-01-01
  • 2015-11-20
  • 2011-01-10
  • 2020-12-20
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多