Hibernate 6逆向工程(hbm2java)配置java.util.Date类型方法
解决Hibernate 6逆向工程生成java.util.Date而非java.sql.Timestamp的问题
核心问题原因
Hibernate 6的逆向工程工具调整了类型映射逻辑:仅配置hibernate-type只会指定Hibernate内部的映射类型,生成实体类字段时,工具会默认根据JDBC类型匹配对应的java.sql类型(比如TIMESTAMP对应java.sql.Timestamp)。需要显式指定java-type来强制生成java.util.Date,同时配置temporalType自动添加@Temporal注解。
具体配置步骤
修正
hibernate.reveng.xml的类型映射
更新逆向工程配置文件,为JDBC的DATE和TIMESTAMP类型指定java-type和对应的temporalType属性:<hibernate-reverse-engineering> <type-mapping> <!-- 映射JDBC DATE到java.util.Date,自动添加@Temporal(TemporalType.DATE) --> <sql-type jdbc-type="DATE" java-type="java.util.Date" hibernate-type="java.util.Date"> <column-property name="temporalType" value="DATE"/> </sql-type> <!-- 映射JDBC TIMESTAMP到java.util.Date,自动添加@Temporal(TemporalType.TIMESTAMP) --> <sql-type jdbc-type="TIMESTAMP" java-type="java.util.Date" hibernate-type="java.util.Date"> <column-property name="temporalType" value="TIMESTAMP"/> </sql-type> </type-mapping> </hibernate-reverse-engineering>确认Maven插件配置正确性
确保maven-antrun-plugin中的hbm2java任务启用ejb3和jdk5参数(你的现有配置已满足),同时Hibernate Tools依赖版本与Hibernate 6主版本保持一致:<dependency> <groupId>org.hibernate.tool</groupId> <artifactId>hibernate-tools-ant</artifactId> <version>6.6.2.Final</version> </dependency>
验证效果
执行逆向工程命令:
mvn antrun:run@hbm2java
生成的实体类字段将符合预期:
@Temporal(TemporalType.TIMESTAMP) @Column(name="created") private Date created;
额外注意事项
- 检查
hibernate.properties中是否存在覆盖类型映射的配置项,避免冲突 - 如果使用了自定义逆向工程策略类,确保其逻辑没有修改类型映射规则
内容的提问来源于stack exchange,提问作者fanfavorite
相关产品推荐
相关产品推荐

