2015-01-02 3 views
3

ObjectDB를 사용하여 Spring MVC 응용 프로그램을 빌드하고 있습니다. 필자의 목표는 where 절에서 비교할 쿼리 매개 변수로 Java 8 Date and Time을 사용하는 것입니다.ObjectDB에 대한 쿼리에서 LocalDateTime 사용

의 내가 측정 날짜 객체 가진 개체를 다음 주 잖아 가정 해 봅시다 :

@Entity 
public class MyEntity { 
    @Id @GeneratedValue 
    private long id; 

    @Type(type = "org.jadira.usertype.dateandtime.threeten.PersistentLocalDateTime") 
    private LocalDateTime dateTime; 

    //other properties, constructors, getter... 
} 

그리고 다음 저장소 : 내 저장소에 findByTimeSpan를 호출 할 경우 지금

public interface EntityRepository extends CrudRepository<MyEntity, Long> { 
    @Query("SELECT e FROM MyEntity e WHERE e.dateTime BETWEEN ?1 AND ?2") 
    Iterable<MyEntity> findByTimeSpan(LocalDateTime start, LocalDateTime end); 

    Iterable<MyEntity> findAll(); 
} 

, 나는 빈을 얻고있다 반복 가능. 대신 findAll()을 호출하면 정확한 dateTime을 포함하여 데이터베이스의 모든 엔티티가 나에게 제공됩니다.

이 문제는 JPA에서 새로운 Time API가 없기 때문에 발생합니다. 하지만 이전에 퍼시스턴스 문제로 인해 Hibernate와 함께 HSQLDB를 지속성 레이어로 사용했기 때문에 JPA에서 지원하지 않아도 가능하다는 것을 알고 있습니다.

이 문제에 대해 알려진 해결 방법이 있습니까?

내 아이디어 여기서 그 속성을 포함하여 원래의 방법

에 위임 시간의 API에서 각각 사용하는 클래스 @Entity 주석 래퍼 기입의

-persist java.util.Date (또는 어쩌면 java.sql.Timestamp) 코드에서 LocalDateTime으로 사용하기 위해 getter를 사용하십시오.

그러나 문제는 (추가로 노력할 때) 효율성입니다. 소프트웨어가 생산적으로 사용되면 데이터베이스는 MyEntity 클래스의 백만 개가 넘는 엔티티 (번호가 늘어남)를 저장해야하며 다른 클래스는 말할 필요가 없습니다.

그래서 ObjectDB에서 WHERE 매개 변수로 LocalDateTime을 사용하는 솔루션을 가진 사람이 있습니까? 사전

답변

0

LocalDateTime에서

덕분에 현재 날짜/시간 형식으로 ObjectDB (그리고 JPA)를 지원하지 않습니다. 다른 Serializable 형식으로 지원되지만 쿼리에는 사용할 수 없습니다.

따라서 표준 JPA 날짜/시간 유형을 사용해야하며 값을 LocalDateTime과 변환하는 래퍼 메소드를 제공해야합니다.