我有一个数据库表如下:
+----+------------+-----------+---------------------+---------+
| 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();