- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我试图将 java.time.LocalDate
参数传递给命名查询,但 Hibernate 错误地期望 java.util.Date
类型的参数。 我在 Spring Boot 2.2.5 上使用 Java 8(使用 Hibernate 5.4.12 和 JPA 2.2.5)。
异常(exception):
Exception - org.springframework.dao.InvalidDataAccessApiUsageException: Parameter value [2020-03-30] did not match expected type [java.util.Date (n/a)]; nested exception is java.lang.IllegalArgumentException: Parameter value [2020-03-30] did not match expected type [java.util.Date (n/a)]
DAO方法:
java.time.LocalDate date = LocalDate.now(); // example date
result = entityManager.createNamedQuery("MyTableEntity.query", MyTableEntity.class)
.setParameter("date", date)
.setMaxResults(1)
.getSingleResult();
命名查询:
@NamedQuery(name = "MyTableEntity.query", query = "SELECT o FROM MyTableEntity o WHERE date(o.timestamp) = :date")
实体:
@Entity
@Table(name = "my_table")
public class MyTableEntity implements Serializable
{
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(name = "id")
private Long id;
@Column(name = "time_control")
private java.time.OffsetDateTime timestamp;
private static final long serialVersionUID = 1L;
// constructors...
// getters and setters...
}
我认为问题(bug?)出在命名查询中,其中从 Timestamp
到 Date
的转换生成 java.util.Data
类型。事实上,如果我在相同类型的属性上使用 LocalDate
类型参数查询另一个实体,它会按预期工作。
但是我通过传递 java.sql.Date.valueOf(date) 作为参数解决了这个问题,但我想知道为什么 Hibernate 没有按照我的预期解析 LocalDate .
最佳答案
您在 hql/jpql 查询中使用的每个函数都应该在您使用的 hibernate 方言中声明。在您的情况下,date
函数的声明看起来像这样:
import org.hibernate.type.StandardBasicTypes;
public YourDialect {
// ...
registerFunction( "date", new StandardSQLFunction( "date", StandardBasicTypes.DATE ) );
}
下面您可以看到StandardBasicTypes.DATE
是如何定义的:
/**
* The standard Hibernate type for mapping {@link java.util.Date} ({@link java.sql.Date}) to JDBC
* {@link java.sql.Types#DATE DATE}.
*
* @see TimeType
*/
public static final DateType DATE = DateType.INSTANCE;
这就是您在问题异常(exception)中提到的原因。您可以通过按以下方式重新定义 date
函数来更改此设置:
import org.hibernate.dialect.function.StandardSQLFunction;
import org.hibernate.type.LocalDateType;
public class MyDialect extends SomeHibernateDialect
{
public MyDialect()
{
super();
registerFunction( "date", new StandardSQLFunction( "date", LocalDateType.INSTANCE ) );
}
}
然后使用这个方言。之后,您的初始查询将起作用。
关于java - java.time.LocalDate 参数在 hibernate 查询中作为 java.util.Date 处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60934427/
我正在尝试计算 2 个 localDates 之间的天数 我从这个答案中获得灵感:https://stackoverflow.com/a/325964对于这个问题Determine Whether T
我在使用 Joda daysBetween 函数时遇到问题。它一直在告诉我 The method daysBetween(ReadableInstant, ReadableInstant) in th
初始问题: 在Scala中,我想使用隐式 Ordering[T]#Ops比较两个LocalDate . 它只是使用像 > 这样的“运算符”而不是isAfter . 它应该只是一个导入:import s
如何删除 localDate 中的 T? 我需要删除“T”以匹配数据库中的数据。 这是我的代码 DateTimeFormatter formatter = DateTimeFormatter.ofPa
这个问题已经有答案了: How to format LocalDate object to MM/dd/yyyy and have format persist (4 个回答) How can you
这个问题在这里已经有了答案: What is the difference between public, protected, package-private and private in Jav
这个问题已经有答案了: SimpleDateFormat ignoring month when parsing (4 个回答) Java date format conversion - getti
这个问题已经有答案了: SimpleDateFormat ignoring month when parsing (4 个回答) Java date format conversion - getti
这个问题在这里已经有了答案: Localdate.format, format is not applied (2 个答案) How to format LocalDate to string? (
这个问题在这里已经有了答案: Importing two classes with same name. How to handle? (11 个回答) 7年前关闭。 我正在练习如何处理日期。但是当我
根据 Joda 中的文档: public LocalDate(int year, int monthOfYear, int dayOfMonth, Chronology chron
我正在尝试开发一个独立于 GWT 的通用模块,直到它实际在 GWT 应用程序中使用为止。问题是 GWT 不支持 joda 并且我的模块不使用 GWT。 我想要实现的目标(这行不通): 最
问题:Spring 似乎对 LocalDate 使用不同的反序列化方法,具体取决于它是出现在 @RequestBody 还是请求 @ReqestParam -这是正确的吗?如果是这样,是否有办法将它们
我想使用 Java8 DateTime API 中的 LocalDate 和 LocalDateTime,并且在值为 null 时无法坚持到 postgresql date 和 timestamp。
我正在做以下编程练习:Unlucky Days 。声明如下: Friday 13th or Black Friday is considered as unlucky day. Calculate h
这个问题已经有答案了: Java 8 LocalDateTime is parsing invalid datetime (5 个回答) How to sanity check a date in J
我有一个包含以下字段的员工类。 class Employee { final int id; final String name; final LocalDate update
这个问题已经有答案了: If statement gives condition is always true (4 个回答) 已关闭 3 年前。 我试图将两个日期与日期列表进行比较(列表元素已被删除
被这个问题困扰了一段时间,希望得到一些意见。我想验证用户输入的日期,以便我可以使用 LocalDate 对象执行计算。但是,当输入有效日期时,返回的日期是前一个无效日期,这会引发异常并崩溃。我错过了什
这个问题已经有答案了: How can I parse/format dates with LocalDateTime? (Java 8) (11 个回答) 已关闭 3 年前。 我有一个日期时间信息字
我是一名优秀的程序员,十分优秀!