当前位置: 首页 > 知识库问答 >
问题:

在LocalDateTime字段上使用DATE()函数进行MySQL查询

袁奇逸
2023-03-14

我有这样一个问题:

@Query("SELECT rhwp.pk.reservation FROM ReservationHasWorkingPlace rhwp WHERE rhwp.pk.workingPlace.idWorkingPlace = ?1 AND NOT (DATE(rhwp.pk.reservation.endDateTime) < ?2 OR DATE(rhwp.pk.reservation.startDateTime) > ?3)")
List<Reservation> getReservationsForWPAndDateInterval(Integer idWorkingPlace, LocalDate startDate, LocalDate endDate);

其中我将存储到数据库中的DateTime与通过java方法传递的localDate进行比较。我收到这个异常:

Caused by: java.lang.IllegalArgumentException: Parameter value [2018-04-20] did not match expected type [java.util.Date (n/a)]

有一种方法可以配置hibernate/jpa自动进行转换,或者我必须传递一个日期对象,而不是LocalDate?我甚至尝试导入hibernate-java8,但没有改变

<dependency>
    <groupId>org.hibernate</groupId>
    <artifactId>hibernate-core</artifactId>
    <version>${hibernate.version}</version>
</dependency>
<dependency>
    <groupId>org.hibernate</groupId>
    <artifactId>hibernate-java8</artifactId>
    <version>${hibernate.version}</version>
</dependency>

共有2个答案

全流觞
2023-03-14

转换与使用java.sql.Date.value(启动)工程

张华池
2023-03-14

您可以简单地使用@Converter。将LocalDateTime转换为时间戳的示例:

@Converter
public class SomeConverterName implements AttributeConverter<LocalDateTime, Timestamp> {

    @Override
    public Timestamp convertToDatabaseColumn(final LocalDateTime locDateTime) {
        return Timestamp.valueOf(locDateTime);
    }

    @Override
    public LocalDateTime convertToEntityAttribute(final Timestamp sqlTimestamp) {
        return sqlTimestamp.toLocalDateTime();
    }
}

然后在实体字段上使用:

@Column(name = "somefield")
@Convert(converter = SomeConverterName.class)
private LocalDateTime someDate;
 类似资料:
  • 问题内容: 我的MySQL表中有一个BIT类型的字段。我想使用位值存储记录的状态,例如: 每个记录可以一次具有许多状态。对于status1和status3,该值将为1 + 4 =5。我可以使用以下命令查询具有status3的所有记录的表: 我在上有索引,但告诉我未使用任何索引。在这种情况下可以使用索引吗? PS使用单独的多对多链接表是更规范的解决方案,但我想为此提供更多的“扁平”结构。 问题答案:

  • 以下MySQL查询是等效的: 然而,行构造器表单(即第一个示例)的强大之处在于,您可以使用它来处理查询任意长度的值对列表。没有它,您必须编写动态sql,这是一个安全风险。使用第一个表单避免了这个棘手的问题。 但是,如何使用预准备状态在JDBC中表示这一点?例如: 我已经研究了setArray,但是如何在数组的值中表示列1和列2的值?我想知道是否接口可以作为这个管道。但是阅读文档时,我看不出它是如何

  • 我需要向MongoDB查询字段的编号:姓名、电话、电子邮件。查询应该支持语法:执行查询的更好方法是什么: 用$或查询字段数 用上述字段的值和该字段的多键索引创建数组字段 示例集合包含以下文档 当我发现所有带有姓名、电话或电子邮件且包含的文档时,应返回文档1和3。

  • 本文向大家介绍MySQL查询以字符串字段中的数字字符对行进行分组?,包括了MySQL查询以字符串字段中的数字字符对行进行分组?的使用技巧和注意事项,需要的朋友参考一下 为此,您可以在+运算符的帮助下将0与字符串字段连接起来。这里的场景就像我们需要从字符串字段“ 9844Bob ”中获取数字“ 9844 ”。 让我们首先创建一个表- 使用插入命令在表中插入一些记录- 使用select语句显示表中的所

  • 问题内容: 我有一个观点。 在我有很多的信息的一些系统,如和我要保存所有。在中,我只想添加一个信息。 这两个视图之间的匹配字段是和。因此,我必须在两个视图中匹配具有相同IP和端口的那些主机。 例子: 查看A: 查看B: 输出 注意:视图A的某些主机可能在视图B中没有与IP /端口相关的项目。 视图A的某些主机也可能在视图B中具有某些匹配项。 我以为我应该使用LEFT JOIN才能拥有View A的

  • 问题内容: 我正在使用Jesey在Java(JAX-RS)中实现Restful Web Service。我在Tomcat v7.0上运行它,我使用Hibernate将数据映射到数据库(MySQL)。我有一个查询来获取可交付成果的列表: 它给了我一百个可交付成果,但我想在Task表中拥有前三名。感谢您的帮助。如何修改查询? 请注意,这三个可交付成果不应重复。 与@FGreg答案存在冲突。当我使用这些