无法通过使用hibernate的sql查询更新日期



我有一个数据库表如下:

+----+------------+-----------+---------------------+---------+
| id | first_name | last_name | date_of_birth       | company |
+----+------------+-----------+---------------------+---------+
|  1 | Vyom       | Yadav     | 2002-09-28 00:00:00 | Google  |
+----+------------+-----------+---------------------+---------+

这里date_of_birth属于DATETIME类型。

dateOfBirth的配置注释:

@Column(name = "date_of_birth")
@Temporal(TemporalType.DATE)
private Date dateOfBirth;

我正在尝试通过Hibernate更新日期。我可以用下面的方法更新它:

Date dob = DateUtils.parseDate("28/09/2002");
Employee foo = session.get(Employee.class, 1);
foo.setDateOfBirth(dob);
session.getTransaction().commit();

这里,DateUtils是一个简单的类,它使用SimpleDateFormatter来格式化日期。当我尝试像这样更新日期时:

Date dob = DateUtils.parseDate("28/09/2002");
session.createQuery("UPDATE Employee SET dateOfBirth='"+ dob +"' WHERE id=1").executeUpdate();
session.getTransaction().commit();

我得到一个错误说:

由以下原因引起:com.mysql.cj.jdbc.exceptions. mysqldatatrunation: Data截断:错误的日期时间值:'Sat Sep 28 00:00:00 IST 2002'查询列'date_of_birth'

如果datetime值不正确,那么我如何能够使用setter更新日期?

谁能帮我一下,告诉我最好的做法是什么?注意:Java代码中使用的日期格式为dd/MM/yyyy

对于HQL查询选项,您应该将JavaDate绑定到一个命名参数:

Date dob = DateUtils.parseDate("28/09/2002");
session.createQuery("UPDATE Employee SET dateOfBirth = :dob WHERE id = 1")
.setParameter("dob", dob)
.executeUpdate();
session.getTransaction().commit();

最新更新