2016-08-18 2 views
0

데이터베이스는 기본 스키마 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로 변경되었습니다! 그래서 무엇이 잘못 되었습니까?

+0

나는 당신이 당신의 시스템에 다른 시간대를 가지고 있다고 확신 할 것이다. –

+0

여기서 문자열을 날짜로 변환 하시겠습니까? – Jens

+0

참고 : "날짜"를 사용하여 "지역 날짜"를 나타내지 마십시오. '날짜'는 '1970-1-1 00:00:00 UTC'이후의 시간 (밀리 초)입니다. 현지 날짜는'YYYY-mm-dd'입니다. 예를 들면 : 런던에서 8 월 18 일 자정에 태어난 아이의 경우, 생년월일은 YYYY/08/18입니다. 뉴욕시에서 정확히 같은 순간에 태어난 아이는 생년월일이 YYYY/08/17입니다. 순간별로 "날짜"를 나타낼 수 없습니다. –

답변

0

HTML 양식을 데이터베이스로 보낼 때 날짜는 항상 사용하기가 어렵습니다. JDBC에서 가능한 한 java.util.Date 객체를 사용하고 데이터베이스의 로케일이 서버의 로케일과 동일한 지 (String에서 Date로 또는 그 반대로 변환 됨) 구성되어 있는지 확인해야합니다 시간대도 동일합니다.

데이터베이스 드라이버 (또는 데이터베이스 작업 - JPA를 사용할 때 최대 절전 모드 나 이와 비슷한 것을 사용해야합니다)가 지원되지 않을 수 있으므로 LocalDate를 사용하면 데이터베이스 기록과 관련하여 도움이 될 것이라고 생각하지 않습니다. 당신이 날짜로 입력 양식에서 아마 문제가 거짓말을하여 문자열을 변환 곳

때로는 코드에서, 또한 ... 생년월일은 더 간단하다

을 표현하기 위해 문자열을 사용하여, 당신은 우리를 표시하지 않습니다 여기 ...

감사합니다,

루이

0

시도는 적합 당신이 패턴 (당신의 @Entity 클래스에 변수를 날짜 @DateTimeFormat (패턴 = "DD.MM.YYYY")를 설정합니다 당신을 위해).

Ex.

@DateTimeFormat(pattern="dd.MM.yyyy") 
@Column(name = "auctionDate") 
private LocalDate auctionDate; 
관련 문제