我想知道是否可以从jpa / hibernate注释创建数据库列描述/注释,如下所示:
ALTER TABLE tablename CHANGE status status INT(11) NOT NULL COMMENT 'sample description/comment';
这将是很棒的功能,但我无法在JPA规范中找到任何相关内容。
也许我应该使用@Column(columnDefinition="")
属性,但我没有任何线索。
请帮忙
答案 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");