2017-07-21 17 views
1

java.text.LocalDateTimeのpostgresql型 'タイムスタンプ付きタイムスタンプ'のマッピングに問題があります。私は使用しています:postgresql、休止状態でdropwizard。Dropwizard - Postgresql - LocalDateTimeのタイムゾーンを持つタイムスタンプを持つHibernateマッピングタイムスタンプ

表:

CREATE SEQUENCE "auth"."roles_seq_id"; 

CREATE TABLE "auth"."roles" (
    id  BIGINT     NOT NULL DEFAULT nextval('auth.roles_seq_id'), 
    name  VARCHAR(50)    NOT NULL, 
    createdat TIMESTAMP WITH TIME ZONE DEFAULT now() NOT NULL 
); 

ALTER TABLE "auth"."roles" ADD CONSTRAINT "roles_id_pk" PRIMARY KEY (id); 

コア:

import lombok.*; 

import javax.persistence.*; 
import java.io.Serializable; 
import java.time.LocalDateTime; 

@Getter 
@Setter 
@ToString(callSuper = true) 
@EqualsAndHashCode(callSuper = false) 
@AllArgsConstructor 
@NoArgsConstructor 
@Entity 
@Table(schema = "auth", name = "roles") 
public class Role implements Serializable { 
    private static final long serialVersionUID = 1L; 

    @Id 
    @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "roles_id_generator") 
    @SequenceGenerator(name = "roles_id_generator", sequenceName = "roles_seq_id") 
    @Column(name = "id") 
    private Long id; 

    @NonNull 
    @Column(name = "name", nullable = false) 
    private String name; 

    @Column(name = "createdat") 
    private LocalDateTime createdAt; 

} 

エラー:

ERROR [2017-07-21 08:13:43,165] io.dropwizard.jersey.errors.LoggingExceptionMapper: Error handling a request: b09a66b06dd214bd ... ! Causing: org.hibernate.type.SerializationException: could not deserialize

のpom.xml:

<dropwizard.version>1.0.6</dropwizard.version> 
<postgresql.version>9.4.1212</postgresql.version> 

<dependency> 
      <groupId>io.dropwizard</groupId> 
      <artifactId>dropwizard-hibernate</artifactId> 
      <version>${dropwizard.version}</version> 
</dependency> 
     <dependency> 
      <groupId>org.postgresql</groupId> 
      <artifactId>postgresql</artifactId> 
      <version>${postgresql.version}</version> 
    </dependency> 

createdAtを削除した場合、またはprivate Date createdAtを使用した場合(LocalDateTimeを使用したい場合)はすべて問題ありません。

+0

どのバージョンのHibernateを使用していますか? – Jonathan

+0

投稿に追加されました – Simon1222

+0

ちょっと見ただけで、DropwizardはHibernate v5.1.0を使用しているようですが、あなたは 'hibernate-java8'依存関係が必要でしょうか? – Jonathan

答えて

2

dropwizard-hibernate:1.0.6バンドルHibernate 5.1と思われます。 the manualによると、余分な依存関係がjava.timeタイプをサポートするために必要とされています

<dependency> 
    <groupId>org.hibernate</groupId> 
    <artifactId>hibernate-java8</artifactId> 
    <version>5.1.0.Final</version> 
</dependency> 

さらには、Hibernate 5.2のように、この余分な依存関係が必要とされていない、機能が主な依存関係に折り曲げたようです。

関連する問題