2016-10-20 4 views
1

저는 Spring Framework와 Hibernate를 ORM Tool로 사용하고 있습니다. 데이터베이스에 날짜를 삽입 할 때마다 날짜가 올바르게 삽입되지 않습니다. 예를 들어 제가 직면하고 문제는, 데이터베이스에 입력을 2016년 10월 20일 날짜가 데이터베이스에 올바르게 삽입되지 않았습니다.

주면이 2016년 10월 19일 같이 저장되는 것으로한다. (하루 차이.). SimpleDateFormat을 사용하여 사용자가 제출 한 양식의 입력 형식으로 날짜를 형식화합니다. TIMESTAMP가 아닌 Date를 저장하고 싶습니다. 아래는 제 컨트롤러 및 모델 코드입니다.

package com.bbms.web.controllers; 

import com.bbms.web.models.BloodBag; 
import com.bbms.web.models.donor.DonorPersonalInformation; 
import com.bbms.web.services.BloodBagService; 
import com.bbms.web.services.DonorService; 
import com.bbms.web.validators.BloodBagValidator; 
import java.beans.PropertyEditorSupport; 
import java.text.SimpleDateFormat; 
import java.util.Date; 
import javax.servlet.http.HttpServletRequest; 
import javax.validation.Valid; 
import org.springframework.beans.factory.annotation.Autowired; 
import org.springframework.beans.propertyeditors.CustomDateEditor; 
import org.springframework.stereotype.Controller; 
import org.springframework.ui.Model; 
import org.springframework.validation.BindingResult; 
import org.springframework.web.bind.ServletRequestDataBinder; 
import org.springframework.web.bind.annotation.InitBinder; 
import org.springframework.web.bind.annotation.PathVariable; 
import org.springframework.web.bind.annotation.RequestMapping; 
import org.springframework.web.bind.annotation.RequestMethod; 
import org.springframework.web.servlet.mvc.support.RedirectAttributes; 

@Controller 
@RequestMapping(value = "/admin/blood-bag") 
public class BloodBagController { 

    @Autowired 
    private DonorService donorService; 

    @Autowired 
    private BloodBagValidator bloodBagValidator; 

    @Autowired 
    private BloodBagService bloodBagService; 

    private BloodBag bloodBag; 

    @InitBinder 
    protected void initBinder(HttpServletRequest request, ServletRequestDataBinder binder) throws Exception { 
     SimpleDateFormat format = new SimpleDateFormat("yyyy/MM/dd"); 
     binder.registerCustomEditor(Date.class, "collectionDate", new CustomDateEditor(format, true)); 
     binder.registerCustomEditor(DonorPersonalInformation.class, "donor", new BloodBagController.DonorEditor()); 
    } 

    @RequestMapping(value = "/collect-blood", method = RequestMethod.GET) 
    public String collectBlood(Model model) { 
     bloodBag = new BloodBag(); 
     bloodBag.setBloodBagId(bloodBagService.generateBloodBagNumber()); 
     model.addAttribute(bloodBag); 
     model.addAttribute("donors", donorService.findAll()); 
     model.addAttribute("title", "Blood Bank : Collect Blood"); 
     return "bloodBag/collectBlood"; 
    } 

    @RequestMapping(value = "/collect-blood", method = RequestMethod.POST) 
    public String saveBloodBag(Model model, @Valid BloodBag bloodBag, BindingResult result, 
      RedirectAttributes redirectAttributes) { 
     bloodBagValidator.validate(bloodBag, result); 
     if (result.hasErrors()) { 
      model.addAttribute("donors", donorService.findAll()); 
      model.addAttribute("title", "Blood Bank : Collect Blood"); 
      return "bloodBag/collectBlood"; 
     } 
     bloodBagService.saveBloodBag(bloodBag); 
     redirectAttributes.addFlashAttribute("message", "Blood bag saved."); 
     return "redirect:/admin/blood-bag/stock"; 
    } 
} 

모델 클래스

package com.bbms.web.models; 

import com.bbms.web.models.donor.DonorPersonalInformation; 
import com.fasterxml.jackson.annotation.JsonBackReference; 
import java.io.Serializable; 
import java.util.Date; 
import javax.persistence.Column; 
import javax.persistence.Entity; 
import javax.persistence.GeneratedValue; 
import javax.persistence.GenerationType; 
import javax.persistence.Id; 
import javax.persistence.ManyToOne; 
import javax.persistence.Table; 
import javax.persistence.Temporal; 
import javax.persistence.TemporalType; 

@Entity 
@Table(name = "BLOOD_BAG") 
public class BloodBag implements Serializable { 

    @Id 
    @Column(name = "ID") 
    @GeneratedValue(strategy = GenerationType.AUTO) 
    private Integer id; 
    @Column(unique = true, nullable = false, updatable = false, name = "BLOOD_BAG_GENERATED_ID", length = 30) 
    private String bloodBagId; 
    @Temporal(TemporalType.DATE) 
    @Column(name = "COLLECTION_DATE", length = 20, nullable = true) 
    private Date collectionDate; 
    @Column(name = "RED_CELLS", length = 100, nullable = true) 
    private String redCells; 
    @Column(name = "WHITE_CELLS", length = 100, nullable = true) 
    private String whiteCells; 
    @Column(name = "PLATELETSS", length = 100, nullable = true) 
    private String platelets; 
    @Column(name = "PLASMA", length = 100, nullable = true) 
    private String plasma; 


    //Setters and Getters 

} 

JSP 파일은 귀하의 문제는 가능성이 시간대 설정과 관련이

<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %> 
<%@ taglib uri="http://www.springframework.org/tags/form" prefix="sf" %> 
<%@ taglib uri="http://www.springframework.org/tags" prefix="s"%> 
<%@ taglib uri="http://tiles.apache.org/tags-tiles" prefix="tiles" %> 
<%@ taglib prefix="sec" uri="http://www.springframework.org/security/tags" %> 
<div class="row"> 
    <div class="col-lg-12"> 
     <div class="ibox float-e-margins"> 
      <div class="ibox-title"> 
       <h5>Collect Blood</h5> 
      </div> 
      <div class="ibox-content"> 
       <sf:form class="form" commandName="bloodBag" method="POST"> 
        <div class="row"> 
         <div class="col-lg-6"> 
          <c:set var="bloodBagIdHasBindError"><sf:errors path="bloodBagId"/></c:set> 
          <div class="form-group <c:if test="${!empty bloodBagIdHasBindError}" > has-error </c:if> "> 
           <sf:label path="bloodBagId" cssClass="control-label">Blood Bag Number</sf:label> 
           <sf:input path="bloodBagId" cssClass="form-control" palceholder="Blood Bag Number" /> 
           <p><sf:errors path="bloodBagId" /></p> 
          </div>      

          <c:set var="collectionDateHasBindError"><sf:errors path="collectionDate"/></c:set> 
          <div class="form-group <c:if test="${!empty collectionDateHasBindError}" > has-error </c:if> "> 
           <sf:label path="collectionDate" cssClass="control-label">Date (yyyy/MM/dd)</sf:label> 
           <sf:input path="collectionDate" cssClass="form-control" palceholder="" /> 
           <p><sf:errors path="collectionDate" /></p> 
          </div> 
          <c:set var="redCellsHasBindError"><sf:errors path="redCells"/></c:set> 
          <div class="form-group <c:if test="${!empty redCellsHasBindError}" > has-error </c:if> "> 
           <sf:label path="redCells" cssClass="control-label">Red Cells</sf:label> 
           <sf:input path="redCells" cssClass="form-control" palceholder="Red Cells" /> 
           <p><sf:errors path="redCells" /></p> 
          </div> 
         </div> 
         <div class="col-lg-6"> 
          <c:set var="whiteCellsHasBindError"><sf:errors path="whiteCells"/></c:set> 
          <div class="form-group <c:if test="${!empty whiteCellsHasBindError}" > has-error </c:if> "> 
           <sf:label path="whiteCells" cssClass="control-label">White Cells</sf:label> 
           <sf:input path="whiteCells" cssClass="form-control" palceholder="White Cells" /> 
           <p><sf:errors path="whiteCells" /></p> 
          </div>      
          <c:set var="plateletsHasBindError"><sf:errors path="platelets"/></c:set> 
          <div class="form-group <c:if test="${!empty plateletsHasBindError}" > has-error </c:if> "> 
           <sf:label path="platelets" cssClass="control-label">Platelets</sf:label> 
           <sf:input path="platelets" cssClass="form-control" palceholder="Red Cells" /> 
           <p><sf:errors path="platelets" /></p> 
          </div>      
          <c:set var="plasmaHasBindError"><sf:errors path="plasma"/></c:set> 
          <div class="form-group <c:if test="${!empty plasmaHasBindError}" > has-error </c:if> "> 
           <sf:label path="plasma" cssClass="control-label">Plasma</sf:label> 
           <sf:input path="plasma" cssClass="form-control" palceholder="Red Cells" /> 
           <p><sf:errors path="plasma" /></p> 
          </div> 
          <div class="form-group"> 
           <div class="" style="margin-top: 39px"> 
            <button class="btn btn-sm btn-info" type="submit">Save Blood Bag</button> 
           </div> 
          </div> 
         </div> 
        </div> 
       </sf:form> 
      </div> 
      <div class="ibox-footer"> 
      </div> 
     </div> 
    </div> 
</div> 

답변

0

이다 -, 당신이해야 당신의 기업에 대한 대신 날짜 형식을 유의하시기 바랍니다 새 Java API (또는 이전 JVM에서 응용 프로그램을 실행해야하는 경우 Joda Time)에서 LocalDate를 사용하십시오.

DB 시간대 설정을 확인하십시오. 서버 시간대 설정과 다를 수 있습니다.

+0

예 시간대 문제였습니다. 감사합니다 jderda –

+0

그게 당신의 문제를 해결했다면 답장으로 답장을 표시하십시오. 감사! – jderda

+0

나는 이미 당신의 답변에 대한 투표를했지만, 내가 순위를 받으면 게시 될 것입니다. @ jderda 감사합니다. –

0

Java8을 사용할 수 있다면 DateTime 클래스를 사용하는 대신 오래된 LocalDate/LocalTime/LocalDateTime을 사용하는 것이 좋습니다.

프로젝트에 compile org.hibernate:hibernate-java8:5.1.0.Final 종속성을 추가하십시오.

더 이상 Date 클래스를 사용하지 마십시오.

관련 문제