데이터베이스는 기본 스키마 hr 인 Oracle 11g2 Express입니다. 클래스 모델의데이터베이스에 잘못된 날짜 값이 삽입되었습니다.
코드 : 클래스 모델의
@Entity
@Table(name = "HR.EMPLOYEES")
public class User {
private int id;
private String username;
private String firstname;
private String lastname;
private String email;
private Date hireDate; // java.util.Date
private String job_id;
@Id
@SequenceGenerator(name="EMPLOYEES_SEQ", sequenceName="EMPLOYEES_SEQ", allocationSize=1)
@GeneratedValue(strategy=GenerationType.SEQUENCE, generator="EMPLOYEES_SEQ")
@Column(name = "EMPLOYEE_ID")
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
@Formula(value="FIRST_NAME || ' ' || LAST_NAME")
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
@Column(name = "FIRST_NAME")
public String getFirstname() {
return firstname;
}
public void setFirstname(String firstname) {
this.firstname = firstname;
}
@Column(name = "LAST_NAME")
public String getLastname() {
return lastname;
}
public void setLastname(String lastname) {
this.lastname = lastname;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
@Column(name="HIRE_DATE")
public Date getHireDate() {
return hireDate;
}
public void setHireDate(Date hireDate) {
this.hireDate = hireDate;
}
@Column(name="JOB_ID")
public String getJob_id() {
return job_id;
}
public void setJob_id(String job_id) {
this.job_id = job_id;
}
}
구현 :
public class UserDAOImpl implements UserDAO {
@Autowired
private SessionFactory sessionFactory;
public UserDAOImpl() {
}
public UserDAOImpl(SessionFactory sessionFactory) {
this.sessionFactory = sessionFactory;
}
@Override
@Transactional
public List<User> list() {
@SuppressWarnings("unchecked")
List<User> listUser = (List<User>) sessionFactory.getCurrentSession()
.createCriteria(User.class)
.setResultTransformer(Criteria.DISTINCT_ROOT_ENTITY).list();
return listUser;
}
@Override
@Transactional
public User get(int id) {
String hql = "from User where id=" + id;
Query query = sessionFactory.getCurrentSession().createQuery(hql);
@SuppressWarnings("unchecked")
List<User> listUser = (List<User>) query.list();
if (listUser != null && !listUser.isEmpty()) {
return listUser.get(0);
}
return null;
}
@Override
@Transactional
public void saveOrUpdate(User user) {
sessionFactory.getCurrentSession().saveOrUpdate(user);
}
@Override
@Transactional
public void delete(int id) {
User userToDelete = new User();
userToDelete.setId(id);
sessionFactory.getCurrentSession().delete(userToDelete);
}
}
JSP 페이지 :
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>${titre}</title>
<style type="text/css">
a {
text-decoration: none;
}
</style>
</head>
<body>
<div align="center">
<h1>${titre}</h1>
<table>
<form:form action="save" method="post" modelAttribute="user">
<form:hidden path="id"/>
<tr>
<td>Firstname:</td>
<td><form:input path="firstname"/></td>
</tr>
<tr>
<td>Lastname:</td>
<td><form:input path="lastname"/></td>
</tr>
<tr>
<td>Email:</td>
<td><form:input path="email"/></td>
</tr>
<tr>
<td>Hiredate:</td>
<td><form:input path="hireDate"/></td>
</tr>
<tr>
<td>Job_id:</td>
<td><form:input path="job_id"/></td>
</tr>
<tr>
<td>
<input type="submit" value="Save">
</td>
<td><a href="<c:url value='/' />"><input type="button" value="Annuler" /></a></td>
</tr>
</form:form>
</table>
</div>
</body>
</html>
이 (가) JSP 페이지에서 제출 '버튼을 클릭 데이터가 테이블에 삽입됩니다. 그러나 날짜 란은 18/08/16에서 08/06/17로 변경되었습니다! 그래서 무엇이 잘못 되었습니까?
나는 당신이 당신의 시스템에 다른 시간대를 가지고 있다고 확신 할 것이다. –
여기서 문자열을 날짜로 변환 하시겠습니까? – Jens
참고 : "날짜"를 사용하여 "지역 날짜"를 나타내지 마십시오. '날짜'는 '1970-1-1 00:00:00 UTC'이후의 시간 (밀리 초)입니다. 현지 날짜는'YYYY-mm-dd'입니다. 예를 들면 : 런던에서 8 월 18 일 자정에 태어난 아이의 경우, 생년월일은 YYYY/08/18입니다. 뉴욕시에서 정확히 같은 순간에 태어난 아이는 생년월일이 YYYY/08/17입니다. 순간별로 "날짜"를 나타낼 수 없습니다. –