首先,如果我想将带有时区的日期时间映射到Slick,我应该使用哪个类OffsetDateTime
或ZonedDateTime
?至于Joda,我们只能使用DateTime
。
如何为Slick表映射编写一些隐式转换为java8 ZonedDateTime
和Sql Timestamp
之间的转换?
使用joda DateTime
来包含时区信息似乎非常简单。但是,一旦切换到Java8,我不确定是否应该使用ZonedDateTime
或OffsetDateTime
,因为http://www.oracle.com/technetwork/articles/java/jf14-date-time-2125367.html建议使用OffsetDateTime。
对于我当前的代码,我只使用Java8 LocalDateTime
并编写隐式映射以便在光滑之间进行映射。
implicit val JavaLocalDateTimeMapper = MappedColumnType.base[LocalDateTime, Timestamp](
l => Timestamp.valueOf(l),
t => t.toLocalDateTime
)
不太确定我可以使用ZonedDateTime
或OffsetDateTime
编写类似内容吗?
答案 0 :(得分:12)
从Slick 3.1开始,简短的回答是使用OffsetDateTime,但您需要将其映射到CREATE TABLE public.trajectory_start_end_geom
(
id integer NOT NULL DEFAULT nextval('trajectory_start_end_geom_id_seq'::regclass),
trajectory_id bigint,
user_id bigint,
start_geom geometry(Polygon,4326),
end_geom geometry(Polygon,4326),
CONSTRAINT trajectory_start_end_geom_pkey PRIMARY KEY (id)
)
WITH (
OIDS=FALSE
);
CREATE TABLE public.trajectory_geom
(
id integer NOT NULL DEFAULT nextval('trajectory_geom_id_seq'::regclass),
trajectory_id bigint,
user_id bigint,
geom geometry(LineString,4326),
CONSTRAINT trajectory_geom_pkey PRIMARY KEY (id)
)
WITH (
OIDS=FALSE
);
CREATE TABLE public.point
(
id integer NOT NULL DEFAULT nextval('point_id_seq'::regclass),
user_id bigint,
date date,
"time" time without time zone,
lat double precision,
lon double precision,
trajectory_id integer,
geom geometry(Geometry,4326),
CONSTRAINT point_pkey PRIMARY KEY (id)
)
WITH (
OIDS=FALSE
);
列,而不是String
才能使其正常工作与任何数据库。
也就是说,您需要Timestamp
。您可以使用MappedColumnType.base[OffsetDateTime, String]
和toString
进行字符串转换:
OffsetDateTime.parse
OffsetDateTime的回答涵盖ZonedDateTime和What's the difference between java 8 ZonedDateTime and OffsetDateTime?之间的差异,所以我不会在此重复。
但是,您需要阅读该内容以确定简短答案是否符合您的情况。
如果您通过there's support for java.time项目使用Postgres,slick-pg。我自己没有机会使用它,但显然值得研究一下你是否正在使用的数据库。例如,the test suite代表" date2"插件。
奇妙的消息是,在Slick中添加了对java.time数据类型的支持的主动拉取请求。您可以监控当前为Slick 3.2安排的进度on the ticket。
答案 1 :(得分:0)
有一个我不相信曾经发布过的分支,但确实有Java8时间支持:
https://github.com/xavier-fernandez/slick
它非常稳定,而且我一直在使用HSQLDB。以及相关规范/拉取请求:
https://github.com/slick/slick/pull/1349
如果您正在寻找代码生成,使用上述分支并不太难,本文将介绍如何执行此操作:
https://github.com/slick/slick/pull/1349#issuecomment-245566307