2014-09-02 5 views
0

mongodb에 값 유형의 값을 ISODate 또는 play-morphia와 유사한 날짜 형식으로 저장하려고합니다. 그러나, 다음 클래스를 mongodb에 저장하려고하면 lastcheckin에 예외가 발생합니다. 그리고 그것의 유형을 String으로 변경하면 잘 동작합니다. 내가 mongodb의 ISODate에 매핑하기 위해 JAVA에서 올바른 데이터 유형을 사용하지 않았기 때문입니까? play morphia를 사용하여 mongodb에서 ISODate 사용

@Entity(value = "devices", noClassnameStored = true) 
public class Device { 
    public String ip; 
    public String mac; 
    public Date lastcheckin; 
} 

속성을

SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); 
try { 
     device.lastcheckin = sdf.parse(Calendar.getInstance().getTime().toString()); 
    } 
catch (ParseException e){ 
     PlayLogger.instance().info(e.getMessage()); 
} 

을 lastcheckin에 현재 날짜를 지정이만큼이 java.util.Date의로 일반적으로 잘해야 다음 스택 트레이스

Caused by: java.lang.RuntimeException: java.lang.IllegalArgumentException 
    at com.google.code.morphia.mapping.ValueMapper.fromDBObject(ValueMapper.java:27) 
    at com.google.code.morphia.mapping.Mapper.readMappedField(Mapper.java:497) 
    at com.google.code.morphia.mapping.Mapper.fromDb(Mapper.java:480) 
    ... 51 more 
Caused by: java.lang.IllegalArgumentException 
    at java.util.Date.parse(Date.java:615) 
    at com.google.code.morphia.converters.DateConverter.decode(DateConverter.java:32) 
    at com.google.code.morphia.converters.DefaultConverters.fromDBObject(DefaultConverters.java:129) 
    at com.google.code.morphia.mapping.ValueMapper.fromDBObject(ValueMapper.java:25) 
    ... 53 more 
+0

예외를 수정/진단하는 데 도움이 필요하면 실제 스택 추적을 제공하는 것이 좋습니다. – evanchooly

+0

왜 toString()/parse() 작업을 모두하는지 잘 모르겠습니다. 'device.lastcheckin = new Date()'는 잘 작동 할 것입니다. – evanchooly

+0

@evanchooly, 올바른 형식으로 날짜를 저장하고 싶습니다. –

답변

0

을 얻었다.

추 신 : public 속성은 private/protected과 getter 및 setter로 작성해야합니다.

+1

오케이, 고대 버전입니다. https://github.com/mongodb/morphia로 업데이트하십시오. 그리고 코드에 String 버전을 표시하고 있습니까? – xeraa