我已经在Postgres表下面,并使用Java8和Postgres-11与Spring Boot2.1.6.RELEASE.我已经通过了这个问题和这个问题,但我真的想使用Java8 Date API,而不是Java7。
CREATE TABLE note(
note_id serial PRIMARY KEY,
message varchar(255) NOT NULL,
created_at TIMESTAMP WITH TIME ZONE DEFAULT CURRENT_TIMESTAMP
);
我创建了如下所示的模型类,但与我需要的不匹配。
@Data
@Builder
@AllArgsConstructor
@NoArgsConstructor
@EqualsAndHashCode(callSuper = true)
@Entity
public class Note extends AuditEnabledEntity{
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "note_id")
private int noteId;
@Column(name = "message")
private String message;
@Column(name = "created_at")
private LocalDateTime createdAt;
}
本地日期时间
在这里是错误的类型。该类不能表示一个时刻,正如其Javadoc中所解释的那样。
该类故意没有时区或与UTC的偏移量的概念。因此,它表示日期和一天中的时间,例如“2019年1月23日中午”,但不知道这是东京、巴黎还是蒙特利尔的中午,例如,相隔几个小时的三个非常不同的时刻。因此,这种类型适用于标准SQL类型TIMESTAMP WITHOUTime ZONE
-没有,没有。
有关更多讨论,请参阅:Instant和LocalDateTime有什么区别?
对于标准SQL类型TIMESTAMP WITH TIME ZONE
,您应该使用Java类型Instant
、OffsetDateTime
或ZonedDateTime
。在这三种情况中,JDBC4.2只需要支持第二种OffsetDateTime
。
检索。
OffsetDateTime odt = myResultSet.getObject( … , OffsetDateTime.class ) ;
从Postgres检索到的值将始终使用UTC格式。SQL标准没有指定这种行为,因此数据库各不相同。在Postgres中,发送到TIMESTAMP和时间区域类型
的字段的任何值都将调整为UTC格式。检索到的值使用UTC格式。
存储。
myPreparedStatement.setObject( … , odt ) ;
从UTC(零时差)调整到特定地区(时区)人们使用的挂钟时间。
ZoneId z = ZoneId.of( "Asia/Tokyo" ;
ZonedDateTime zdt = odt.atZoneSameInstant( z ) ;
我不使用JPA,宁愿保持简单。
但是根据这个答案,JPA 2.2支持java。时间类型。
Hibernate也支持java.time。
问题内容: 假设我有一个模型: 目前,我正在使用默认的admin创建/编辑此类型的对象。如何从管理员中删除该字段,以使每个对象都无法使用值创建,而是将接收默认值? 问题答案: 设置为和为默认值。 http://docs.djangoproject.com/en/dev/ref/models/fields/#editable 另外,你的字段是不必要的。Django将自动添加它。
问题内容: 我需要为一个表创建一个timestamp字段,该表的行在一定时间后需要过期。如果我使用以下内容: 它以一种人类可读的格式显示时间,如果我可以将时间设置为纪元时间,则可以轻松得多,这样我就可以用几秒钟的时间进行计算。有没有一种方法可以创建一个字段,当默认情况下以纪元时间创建行时,该字段将显示当前时间?谢谢! 问题答案: 您可能希望在语句中使用该函数,如以下示例所示:
问题内容: 我有一个模型,希望包含一个主题名称及其首字母。(数据在某种程度上是匿名的,并且通过缩写来跟踪。) 现在,我写了 如最后一行所示,我希望能够将姓名的首字母实际作为字段(与名称无关)存储在数据库中,但是会使用基于名称字段的默认值进行初始化。但是,我遇到了问题,因为Django模型似乎没有“自我”。 如果将行更改为,则可以执行syncdb,但不能创建新主题。 在django中,有一个可调用函
我需要使用一个字符串搜索postgre sql表中的所有列,但它会导致类型为“timestamp with timezone”的列出错;它显示错误:“错误:运算符不存在:没有时区的时间戳~~未知”
问题内容: 我的数据库是MySql 5.6。 我想使用CURRENT_TIMESTAMP作为类型为TIMESTAMP(3)的属性的默认值。 但是我得到了错误: 错误1067(42000):“更新”的默认值无效 我认为是因为仅以秒为单位。 如何将小数部分的当前时间设置为默认值? 问题答案: 根据文档并输入列: 如果或列定义在任何地方都包含显式的小数秒精度值,则在整个列定义中必须使用相同的值。 这是允
问题内容: 我们有一个带有枚举字段-的实体,我们想使用JPA注释-为它设置默认值。 但是,当我们将实体保存到数据库时,此字段的值为和。对于布尔字段- 正确的默认值()已保存。 如果改为使用:,则会在保存时得到以下异常: 我们做错了什么?为什么它仅适用于布尔值? 问题答案: 当某些SQL代码在未为emailCommunicationStatus列指定任何值的情况下插入一行时,您所做的工作很有用。在这