使用spring-data-jpa和mssql的LocalTime

时间:2017-05-02 07:38:16

标签: sql-server spring hibernate jpa spring-data-jpa

我们遇到了在MSSQL DB上使用LocalTime的查询问题

我们的实体有字段

@Column(name = "receipt_time", nullable = false)
private LocalTime receiptTime;

一切正常,除了查询时,即使用spring-data-jpa查询

boolean existsByReceiptTime(LocalTime time);

返回The data types time and datetime are incompatible in the equal to operator.

我尝试用sendTimeAsDateTime解决,但它没有用。 url字符串未被接受。然后我尝试使用一些AttributeConverters无济于事。还有其他可能的建议吗?注意:我真的很喜欢使用LocalTime类型。

更新: 生成的查询是

Hibernate: select TOP(?) receipt0_.id as col_0_0_ from receipt receipt0_ where receipt0_.receipt_time=?' is the query.

1 个答案:

答案 0 :(得分:2)

解决方案是编写自定义属性转换器。它可能是Microsoft SQL Server特定的解决方案。

@Converter(autoApply = true)
public class LocalTimeConverter implements AttributeConverter<LocalTime, String> {

    @Override
    public String convertToDatabaseColumn(LocalTime time) {
       return time.toString();
    }

    @Override
    public LocalTime convertToEntityAttribute(String time) {
       return LocalTime.parse(time);
    }
}