Java JPA@Column注释,用于创建注释/说明

Java JPA@Column注释,用于创建注释/说明,java,mysql,sql,hibernate,jpa,Java,Mysql,Sql,Hibernate,Jpa,我想知道是否可以从jpa/hibernate注释创建一个数据库列描述/注释,如下所示: ALTER TABLE tablename CHANGE status INT(11)非空注释“样本说明/注释”; 这将是伟大的功能,但我找不到任何关于这方面的JPA规范 也许我应该使用@Column(columnDefinition=“”)属性,但我没有任何线索。 请帮忙我找到了我自己问题的答案 我不确定这样行吗?它是否适用于所有数据库 当然,它适用于mysql 以下是工作代码: @Column(colu

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

ALTER TABLE tablename CHANGE status INT(11)非空注释“样本说明/注释”;

这将是伟大的功能,但我找不到任何关于这方面的JPA规范

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

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

我不确定这样行吗?它是否适用于所有数据库

当然,它适用于mysql

以下是工作代码:

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

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

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


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

注释说明已经存在于表注释中。为此,我们必须使用Hibernate@Table注释,与JPA@Table注释相辅相成

例如:

@javax.persistence.Table( name = "Cat" )
@org.hibernate.annotations.Table( comment = "Table for cats" )
public class Cat {
...
COMMENT ON TABLE my_schema.my_table IS 'Employee Information';
COMMENT ON COLUMN my_table.my_column IS 'Employee ID number';
关于专栏的评论: 即使在Hibernate5.2/JPA2.1中,似乎也没有类似的版本

很久以前(2007年)就这个问题提交了一个问题,但仍未解决:。自2012年被遗弃

我还在org.hibernate.dialen.dialen中发现了注释用法:

例如,postgresql81dialent支持它(supportsCommentOn()返回true)

它允许使用SQL命令“COMMENT ON…”, 类似于PostgreSQL()。
例如:

@javax.persistence.Table( name = "Cat" )
@org.hibernate.annotations.Table( comment = "Table for cats" )
public class Cat {
...
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映射中提取的

最后,如果使用Hibernate工具和反向工程,专栏的评论将从JDBC DatabaseMetaData中提取,使用org.Hibernate.cfg.reveng.BasicColumnProcessor#processBasicColumns


它将给定的文本附加到创建语句中,因此只要columnDefinition与基础DBS匹配,它就可以工作,因为并非所有RDBMS都支持对列进行“注释”(Postgresql、HSQLDB、Derby to name,但也有一些),那么这肯定只适用于非常有限的RDBMS集。此外,将其放在注释中意味着编译后的代码与允许该语法的RDBMS绑定,而如果将其放在XML文件中,则可以根据所使用的RDBMS交换orm.XML文件。是的。我同意你们的观点。但找不到更好的解决办法。XML是什么意思?对于Table有可能吗?我想我也可以使用
@Table
注释,但还没有测试。应该注意的是,您应该保持DB模式和生成的模型同步。否则,当事情发生变化时,你迟早会遇到麻烦。我通常有自动测试来比较迁移的模式(如前所述使用flyway)和生成的模式。您是否根据开发环境验证模式?这几乎毫无意义。DBA可能会在生产服务器上进行更改,从而破坏您经过测试的迁移脚本。)我要求提供生产DDL,将其应用到开发环境中,并对其进行测试。当然,这是有意义的。这样,您可以将所有模式更改存储在Git中,DBA也可以在其中添加一个新脚本。手动将更改添加到DB就像在生产中将修改过的类注入应用程序JAR中一样。