Элегантно добавляйте комментарии при использовании JPA для автоматического создания таблиц

Java

При использовании JPA для автоматического создания таблицы, если вам нужно добавить аннотации, вам обычно нужно использовать атрибут columnDefinition аннотации столбца таким образом.

@Column(columnDefinition="INT COMMENT '...'")
private int foo;

Таким образом, вы можете добавлять комментарии, но в комментарии нужно вписывать фрагменты SQL. Мало того, что писать хлопотно, так еще и при смене баз данных очень вероятно столкнуться с проблемами несовместимости из-за разных диалектов SQL. В этой статье представлен метод, реализованный интегратором Hibernate без изменения свойства columnDefinition.

Сначала определите аннотацию Comment:

@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.TYPE, ElementType.METHOD, ElementType.FIELD})
public @interface Comment {
    String value() default "";
}

Добавьте в проект CommentIntegrator.java и добавьте конфигурацию Hibernate:

@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));
    }
}

После выполнения вышеуказанных шагов вы можете напрямую использовать аннотацию столбца:

@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 / О, у 1 есть 4 дня / Джей Пако…