当我使用HIBERNATE和SpringMVC从数据库中提取数据时,我遇到了一个问题,除了日期之外,一切都很好。当我获取日期类型的字段时,我会收到日期,但带有前一天。
例如,Im将日期取为">2022-08-28";,但是im接收到">2022-08-27";
当我更新数据时也有一个问题,Hibernate会在第二天保存存储在DB上的日期。
在同一个例子中,Im将日期取为">2022-08-28";,但是当保存该记录时显示为"保存">2022-08-29";
这是我的建筑
实体
@Entity
@Table(name = "cliente_tickets")
public class ClienteTicket {
... other fields...
@DateTimeFormat(pattern = "yyyy-MM-dd")
@Temporal(TemporalType.DATE)
@Column(name = "created_on")
private Date createdOn;
@DateTimeFormat(pattern = "yyyy-MM-dd")
@Temporal(TemporalType.DATE)
@Column(name = "updated_on")
private Date updatedOn;
... other GettersAndSetters...
public Date getCreatedOn() {
return createdOn;
}
public void setCreatedOn(Date createdOn) {
this.createdOn = createdOn;
}
public Date getUpdatedOn() {
return updatedOn;
}
public void setUpdatedOn(Date updatedOn) {
this.updatedOn = updatedOn;
}
}
这是我的DAO 中的方法
@Override
public ClienteTicket buscarId(long id) {
try {
return sessionFactory.getCurrentSession().createQuery("from ClienteTicket ct where ct.idTicket = :id", ClienteTicket.class)
.setParameter("id", id).getSingleResult();
} catch (NoResultException e) {
return null;
}
}
这是服务
@Override
@Transactional
public void guardar(ClienteTicket clienteTicket) {
if (clienteTicket.getCreatedBy() == null || clienteTicket.getCreatedBy().length() == 0) {
clienteTicket.setCreatedOn(new Date());
clienteTicket.setCreatedBy(Utilidades.currentUser());
} else {
clienteTicket.setUpdatedOn(new Date());
clienteTicket.setUpdatedBy(Utilidades.currentUser());
}
this.clienteTicketDao.guardar(clienteTicket);
}
这是我的控制器,用于获取对象
@GetMapping("/editar")
ModelAndView editar(@RequestParam("id") String id) throws ParseException {
ClienteTicket ticket = this.ticketsService.buscarId(Long.parseLong(id));
super.mv = new ModelAndView("/cliente/ticket_formulario");
super.mv.addObject("clienteEncontrado", true);
super.mv.addObject("editar", true);
super.mv.addObject("clienteTicket", ticket);
super.mv.addObject("idClienteActual", ticket.getCliente().getIdCliente());
super.mv.addObject("estadosIncidencia", this.ticketEstadosService.listar());
super.mv.addObject("tiposIncidencia", this.ticketTiposService.listar());
super.mv.addObject("titulo", "Tickets");
//this.ticketsService.guardar(ticket);
return super.mv;
}
当我调试时,我得到了这个JAVA_Debug
这些是DB TABLE_properties 的属性
DB data_TABLE 上的当前数据
JSP中的日期被隐藏DATA_JSP
HTML EDGE_DEVTOOLS
其他数据正确提取Other_data
我已经解决了!,这与时区有关。我电脑上的时区是正确的,问题是jdbc.url上的配置。我使用的是serverTimezone=UTC,我来自墨西哥,所以我需要使用CST。在jdbc.url中添加serverTimezone=CST解决了我的问题。我希望这对将来的某个人有所帮助。TY
更改
jdbc.url=jdbc:mysql://localhost:3306/sge?useSSL=false&serverTimezone=UTC&allowPublicKeyRetrieval=true&zeroDateTimeBehavior=convertToNull
至
jdbc.url=jdbc:mysql://localhost:3306/sge?useSSL=false&serverTimezone=CST&allowPublicKeyRetrieval=true&zeroDateTimeBehavior=convertToNull