是@Temporal首选@Column columnDefinition?

时间:2011-07-19 08:19:15

标签: java hibernate jpa

哪种是最佳做法?

@Column(name = "FOO", columnDefinition = "TIMESTAMP")
private Date foo;

或者

@Column(name = "FOO")
@Temporal(TemporalType.TIMESTAMP)
private Date foo;

文档建议使用columnDefinition是不可移植的......

1 个答案:

答案 0 :(得分:9)

  

文档建议使用columnDefinition是不可移植的   ...

这是真的。 columnDefinition指定了将使用的SQL数据类型。但是,此数据类型可能并非在所有RDBMS中都可用。在JPA中,JPA提供者有责任弄清楚SQL在哪个DB上工作。您可以指定该配置的一部分,但您总是冒险破坏对某些数据库的支持。

另一方面,

@Temporal是一个抽象,是JPA标准的一部分。每个JPA提供程序必须能够将不同类型的@Temporal映射到所有受支持数据库的不同SQL类型。