如何修复弹簧数据中的“错误:错误的DATETIME值:%%”?

时间:2019-05-23 19:01:03

标签: java mysql spring hibernate spring-data

我有一个页面,该页面请求具有搜索功能的项目列表。

我只想指出,这段代码可以在我的工作笔记本电脑上完美运行,并可以在我的实时服务器上部署,但是在我的家用笔记本电脑上,我会遇到以下错误:

WARN  SQL Error: 1525, SQLState: HY000
ERROR Incorrect DATETIME value: '%%'

我在Windows 10上使用带有1.8 java的Eclipse EE maven项目(带有spring数据的spring boot)。MySql默认dev设置。 两台笔记本电脑上都有相同的库。

回购电话:

findAll(request, "%" + f.getSearchField() + "%");

查询:

@Query( value = "SELECT cl from ConnectionLog cl WHERE cl.user.login LIKE :search OR cl.user.firstName LIKE :search OR cl.user.lastName LIKE :search OR CONCAT( cl.user.lastName,  ' ', cl.user.firstName ) LIKE :search OR CONCAT( cl.user.firstName,  ' ', cl.user.lastName ) LIKE :search OR cl.lastSeen LIKE :search OR cl.browser LIKE :search OR cl.operatingSystem LIKE :search")
    Page<ConnectionLog> findAll(Pageable pageable, @Param("search") String search);

“ lastSeen”字段是DATE列。 型号:

@Column(name = "last_seen")
@Temporal(TemporalType.TIMESTAMP)
@JsonProperty
@JsonSerialize(include = Inclusion.NON_NULL)
private Date lastSeen;

我该如何进行这项工作?为什么这可以在一台计算机上运行而不能在另一台计算机上运行?

1 个答案:

答案 0 :(得分:0)

我正在回答自己的问题,因为我毕竟找到了解决方案。不确定是否很好,但是可以正常工作...

我从回购调用中取出了'%',并使用CONCAT()和DATE_FORMAT()将其添加到了@Query中。

DATE_FORMAT(cl.lastSeen, '%Y %m') LIKE CONCAT('%', DATE_FORMAT(:search, '%Y %m'), '%')

完整查询:

@Query( value = "SELECT cl from ConnectionLog cl WHERE cl.user.login LIKE CONCAT('%', :search, '%') OR cl.user.firstName LIKE CONCAT('%', :search, '%') OR cl.user.lastName LIKE CONCAT('%', :search, '%') OR CONCAT( cl.user.lastName,  ' ', cl.user.firstName ) LIKE CONCAT('%', :search, '%') OR CONCAT( cl.user.firstName,  ' ', cl.user.lastName ) LIKE CONCAT('%', :search, '%') OR DATE_FORMAT(cl.lastSeen, '%Y %m') LIKE CONCAT('%', DATE_FORMAT(:search, '%Y %m'), '%') OR cl.browser LIKE CONCAT('%', :search, '%') OR cl.operatingSystem LIKE CONCAT('%', :search, '%')")
    Page<ConnectionLog> findAll(Pageable pageable, @Param("search") String search);