问题保存ZonedDateTime从Dropwizard到MySQL



我使用dropwizard 0.9.3在MySQL上创建一个简单的REST API(使用Hibernate和Jackson -使用Java 8)。

我遇到了一个问题,当试图将UTC DateTime值保存到一个MySQL timestamp列从应用层-而应用程序似乎处理得很好,在数据库中出现的值是一个BLOB,所以我猜测沿着序列化值正确的方式某处。

我的实体看起来像这样:

@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工作,但BLOB被保存到DB的时间戳应该(例如显示一个值像2016-06-28 10:05:22)。

我尝试遵循DW惯例,使用相当传统的引导(和dropwizard-java8包)。我不确定我在这里错过了什么,但我也是DW和Java的新手。

建议不胜感激-谢谢。

DW正在使用hibernate 5+

要使Hibernate支持java时间类型,您需要包含以下依赖项:(用特定版本替换)

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

注意:这不会保存为时间戳类型。用MySQL测试,它保存为datetime类型。

(取自Java 8 LocalDateTime和Hibernate 4)

问候,

阿图尔

相关内容

  • 没有找到相关文章

最新更新