具有日期的员工的Hibernate查询

时间:2016-02-17 06:18:23

标签: mysql hibernate spring-data-jpa

这是我的代码。当我使用mysql查询搜索时查询工作(在屏幕截图中找到)。但是hiberbate查询失败了。

EmployeeAttendanceMaster masterEmployeeFromRepository = masterEmployeeRepository.findById(employee, date);
    if (masterEmployeeFromRepository == null) {

        System.out.println("SignIn Successfully");
    }else System.out.println("You are already Logged In");

masterEmployeeRepository:

@Query("select me from EmployeeAttendanceMaster me where me.employee = ?1 and Date(me.date) = ?2 order by me.date desc")
EmployeeAttendanceMaster findById(Employee employee,Date date);

mysql db screenshot in with same query

db中有相同日期的数据。如果条件,它应该通过。它应该遵循其他条件。但只要我尝试了它就会打印" SignIn Successfully"

感谢提前

1 个答案:

答案 0 :(得分:0)

您正在使用Spring Data JPA @Query注释(从您在问题的评论中提供的完整数据类型中辨别出来)。使用@Queryselect me from EmployeeAttendanceMaster me ...)指定的查询必须是有效的JPA查询语言(JPQL)语句。据我所知和记住,JPQL没有Date()函数。因此,您的查询无效,因为它包含Date(me.date),它引用了一个不存在的JPQL Date()函数,即使您可以直接在MySQL上运行它。

您可以将查询声明更改为:

@Query(value = "select * from EmployeeAttendanceMaster where employee_id = ?1 and Date(date) = ?2 order by date desc", nativeQuery = true)

这将强制JPA提供程序(在您的情况下为Hibernate)将查询视为本机SQL查询,并且将在底层数据库上执行而无需任何转换。但是,您将失去数据库独立性。