使用JPA自动建表时优雅的添加注释

在使用JPA自动建表时,如果需要添加注释,一般需要这样使用Column注解的columnDefinition属性。

1
2
java复制代码@Column(columnDefinition="INT COMMENT '...'")
private int foo;

这种方式可以添加注释,但是需要把SQL片段写入注解中。不仅编写麻烦,而且当更换数据库时,因为不同的SQL方言,很有可能遇到不兼容的问题。本文介绍一种通过Hibernate的Integrator实现,且不需要修改columnDefinition的方法。

首先定义Comment注解:

1
2
3
4
5
java复制代码@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.TYPE, ElementType.METHOD, ElementType.FIELD})
public @interface Comment {
String value() default "";
}

将CommentIntegrator.java添加到项目中,并添加Hibernate配置:

1
2
3
4
5
6
7
8
9
java复制代码@Component
public class HibernateConfig implements HibernatePropertiesCustomizer {
@Override
public void customize(Map<String, Object> hibernateProperties) {
hibernateProperties.put("hibernate.use_sql_comments", true);
hibernateProperties.put("hibernate.integrator_provider",
(IntegratorProvider) () -> Collections.singletonList(CommentIntegrator.INSTANCE));
}
}

完成以上步骤之后,就可以直接使用Column注解了:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
java复制代码@Table
@Entity
@Comment("Table comment")
public class DemoTable {
@Id
@GeneratedValue
@Column
@Comment("Identifier comment")
private Integer id;

@Column
@Comment("Field comment")
private String field;

getter setter ...
}

完整的代码:

github.com/elyar-adil/…

本文转载自: 掘金

开发者博客 – 和开发相关的 这里全都有

0%