这是我的代码。当我使用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"
感谢提前
答案 0 :(得分:0)
您正在使用Spring Data JPA @Query
注释(从您在问题的评论中提供的完整数据类型中辨别出来)。使用@Query
(select 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查询,并且将在底层数据库上执行而无需任何转换。但是,您将失去数据库独立性。