The documentation states that using columnDefinition is not portable ...
It's true. columnDefinition indicates the SQL data type to be used. However, this data type may not be available in all RDBMSs. In JPA, it is the responsibility of the JPA provider to find out which SQL is running on which database. You can specify part of this configuration, but you will always question the support of some databases.
@Temporal , on the other hand, is an abstraction that is part of the JPA standard. Each JPA provider must be able to map different @Temporal types to different SQL types for all supported databases.
source share