JPA @Column注释创建注释/描述

时间:2015-02-27 19:41:27

标签: java mysql sql hibernate jpa

我想知道是否可以从jpa / hibernate注释创建数据库列描述/注释,如下所示:

ALTER TABLE tablename CHANGE status status INT(11) NOT NULL COMMENT 'sample description/comment';

这将是很棒的功能,但我无法在JPA规范中找到任何相关内容。

也许我应该使用@Column(columnDefinition="")属性,但我没有任何线索。 请帮忙

3 个答案:

答案 0 :(得分:7)

我找到了自己问题的答案。

我不确定是否可以?它适用于所有数据库吗?

肯定适用于mysql

以下是工作代码:

@Column(columnDefinition=" INT(11) NOT NULL COMMENT '0 for no action, 1 for executed, 2 for validated, 3 for aproved'")
private int status;

答案 1 :(得分:2)

虽然将域模型映射到关系数据需要Hibernate映射,但将此功能扩展到生成数据库模式也不是一个好主意。

这可能适用于相对较小的项目,但是当您拥有中型到大型企业应用程序时,随着每次Sprint迭代而发展,您需要一个数据库架构迁移工具,如Flyway

评论不需要域模型映射,因为它是关系特定描述。域模型应该使用JavaDocs来记录每个字段的含义(根据特定的域逻辑要求)。

答案 2 :(得分:1)

表格注释已存在评论说明。我们必须使用Hibernate @Table注释,与JPA @Table注释互补。

例如:

@javax.persistence.Table( name = "Cat" )
@org.hibernate.annotations.Table( comment = "Table for cats" )
public class Cat {
...

关于专栏的评论: 似乎没有相应的东西,即使在Hibernate 5.2 / JPA 2.1中也是如此。

很久以前(2007年)就此问题提交了一个问题,但仍未解决:Support @Comment or column attribute on @Table and @Column。自2012年以来被遗弃?

我还在 org.hibernate.dialect.Dialect 中找到了评论:

/**
 * Does this dialect/database support commenting on tables, columns, etc?
 *
 * @return {@code true} if commenting is supported
 */
public boolean supportsCommentOn() {
    return false;
}

/**
 * Get the comment into a form supported for table definition.
 *
 * @param comment The comment to apply
 *
 * @return The comment fragment
 */
public String getTableComment(String comment) {
    return "";
}

/**
 * Get the comment into a form supported for column definition.
 *
 * @param comment The comment to apply
 *
 * @return The comment fragment
 */
public String getColumnComment(String comment) {
    return "";
}

例如PostgreSQL81Dialect支持它(supportsCommentOn()返回true)。

它允许使用SQL命令“COMMENT ON ...”, 就像在PostgreSQL(https://www.postgresql.org/docs/current/static/sql-comment.html)中一样 例如:

COMMENT ON TABLE my_schema.my_table IS 'Employee Information';
COMMENT ON COLUMN my_table.my_column IS 'Employee ID number';

似乎在那里使用: org.hibernate.tool.schema.internal.StandardTableExporter #getSqlCreateStrings

使用 org.hibernate.mapping.Column#getComment 从Hibernate Mapping中提取列的注释。

最后,如果使用 Hibernate Tools 和逆向工程,则使用 org.hibernate.cfg.reveng.BasicColumnProcessor#processBasicColumns 从JDBC DatabaseMetaData中提取列的注释。< / p>

-> String comment = (String) columnRs.get("REMARKS");