2016-08-18 13 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です。 NYCの同じ瞬間に生まれた子供は、生年月日がYYYY/08/17です。瞬時に「日付」を表すことはできません。 –

答えて

0

HTMLフォームをデータベースに渡すとき、日付は常に使いにくいです。 JDBCでは、可能な限りjava.util.Dateオブジェクトを使用し、データベース上のロケールがサーバー上のロケールと同じであることを確認する必要があります(文字列から日付への変換、およびその逆)。タイムゾーンも同じです。

データベースドライバー(またはデータベースの処理 - JPAを使用する場合は、Hibernateなどを使用する必要があります)がサポートされているかどうかわからないため、LocalDateを使用するとデータベースの記録に関してお手伝いします。

時々、誕生日を表現するために、文字列を使用してsimplierです...

また、あなたのコードでは、あなたがあなたの文字列が日付に入力フォームから変換する私たちを示していない、多分問題の嘘ここでは...

よろしく、

ロイック

0

はあなたの@Entityクラスの変数を日付のに適しているパターンで(@DateTimeFormat(パターン= "DD.MM.YYYY")を設定するようにしてくださいあなたのために)。

Ex。

@DateTimeFormat(pattern="dd.MM.yyyy") 
@Column(name = "auctionDate") 
private LocalDate auctionDate; 
関連する問題