2016-06-28 4 views
0

Я использую dropwizard0.9.3, чтобы создать простой API REST через MySQL (с Hibernate и Jackson - с использованием Java 8).Проблемы с сохранением ZonedDateTime от Dropwizard до MySQL

Я пытаюсь сохранить значение UTC DateTime в столбце MySQL timestamp из прикладного уровня - хотя приложение, похоже, хорошо его обрабатывает, значение, отображаемое в db, равно BLOB, m угадывая где-то по порядку сериализации значений правильно.

My Entity выглядит следующим образом:

@Entity 
@Table(name = "users") 
public class User { 

    @Id @NotNull @JsonProperty 
    private String id; 

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

    @JsonProperty @NotNull 
    @Column(name="email", nullable=false) 
    private String email; 

    @JsonIgnore @JsonProperty @NotNull 
    @Column(name="createdAt", nullable = false) 
    private ZonedDateTime createdAt; 

    // default constructor 
    public User() {} 

    public User(String name, String email) { 
     this.name = name; 
     this.email = email; 

     // get the current UTC timestamp 
     this.createdAt = ZonedDateTime.now(ZoneOffset.UTC); 
    } 

} 

Соответствующий DAO является:

public class UserDAO extends AbstractDAO<User> { 

    public UserDAO(SessionFactory factory) { 
     super(factory); 
    } 

    public User create(User user) { 
     return persist(user); 
    } 
} 

И Ресурс:

@Path("/users") 
@Produces(MediaType.APPLICATION_JSON) 
@Consumes(MediaType.APPLICATION_JSON) 
public class UsersResource { 

    private final UserDAO dao; 

    public UsersResource(UserDAO dao) { 
     this.dao = dao; 
    } 

    @PUT 
    @Consumes(MediaType.APPLICATION_FORM_URLENCODED) 
    @UnitOfWork 
    public User create(
     @FormParam("name") String firstName, 
     @FormParam("email") String email 
    ) { 
     User user = new User(name, email); 
     return dao.create(user); 
    } 
} 

тестирование его с простыми curl работ, но a BLOB сохраняется в БД, где должна быть отметка времени (например, отображать значение, подобное 2016-06-28 10:05:22).

Я попытался выполнить соглашения DW, используя довольно обычный бутстрап (и комплект dropwizard-java8). Я не уверен, что я пропустил здесь, но я также новичок в DW и Java в целом.

Предложения приветствуются - спасибо.

ответ

0

DW использует спящим режим 5+

Для Hibernate для поддержки типов времени Java, вам нужно inlcude этой зависимости: (заменить конкретную версию)

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

Примечания: это не спасет к типу времени. Тестирование с помощью MySQL, оно сохраняет тип datetime.

(взял это из: Java 8 LocalDateTime and Hibernate 4)

С уважением,

Артуру