2016-12-29 5 views
0

モデル Postgresの+休止+ NativeQuery:PostgresのTIMSTAMP

package domain; 
@Entity @lombok.Getter @lombok.Setter 
public class Event implements Serializable { 

    private static final long serialVersionUID = 1L; 

    @Id 
    @GeneratedValue(generator = "uuid2") 
    @GenericGenerator(name = "uuid2", strategy = "uuid2") 
    @Type(type="pg-uuid") 
    private UUID uuid; 

    @Column(columnDefinition = "TIMESTAMP", updatable = false) 
    @CreatedDate 
    @Temporal(TemporalType.TIMESTAMP) 
    @Type(type= "PersistentDateTime") // typedef in package-info.java 
    private DateTime createdAt; // Joda's DateTime 
} 

リポジトリ

package repository; 
@Repository 
public interface EventRepository extends JpaRepository<Event, UUID> { 

    // Has to be native query 
    @Query(value = "SELECT * FROM events WHERE created_at >= :created_at ", nativeQuery = true) 
    List<Event> findCreatedSince(@Param(value = "created_at") DateTime createdAt); 

} 

にジョダDateTimeの私はそれがメッセージ"cannot cast type bytea to timestamp without time zone"PSQLExceptionスローfindCreatedSince(someDateTime)を呼び出します。 (実際のところ、JPQLの通常の場合、不平はありません。実際、標準のJPAリポジトリメソッドを使用してデータを完全に格納して取り出すことができます)。一時的な解決のための

[main] TRACE BasicBinder – binding parameter [1] as [VARBINARY] - [1970-01-01T01:00:00.000+01:00]

を私はjava.util.DatecreatedAtの種類を変更し、私は私がどのように使用できるか知りたい:メソッドを呼び出すときに、私は、次のログを(VARBINARYに注意してください)得たレコードの JodaのDateTimeタイプです。前もって感謝します。日付のリポジトリ、変更日時で

+0

たぶん、あなたのJPAプロバイダは、箱から出しJodatime種類をサポートしていませんか?私が使用しているJPAプロバイダ(DataNucleus)はそうですが、JodatimeタイプはJPA仕様の対象外です。 –

+0

私がこの記事で触れたように、通常のJPQL呼び出しはうまく機能するので、それは問題だとは思わない。 – Rad

+0

何かが "bytea"として列をマッピングしている場合、それは動作しません。 Hibernateはスキーマを生成しましたか? Jodatimeフィールドを「bytea」としていますか?すなわち直列化される。 –

答えて

0

List<Event> findCreatedSince(@Param(value = "created_at") Date createdAt); 

使用:

...findCreatedSince(Date.valueOf(createdAt))