在java中运行时修改注释属性值

时间:2010-06-17 13:41:01

标签: java hibernate

我们的模型pojos中的一些方法已经注释如下:

@Column(name="cli_clipping_id", updatable=false, columnDefinition = "varchar(" + ModelUtils.ID_LENGTH + ") COLLATE utf8_bin")

columnDefinition 属性是依赖于数据库供应商的,因此当尝试使用Hibernate删除HSQLDB中的模式时,它会失败:

[ERROR] 16 jun 12:58:42.480 PM main [org.hibernate.tool.hbm2ddl.SchemaExport]
Unexpected token: COLLATE in statement [create table cms.edi_editorial_obj (edi_uuid varchar(23) COLLATE] 

要解决这个问题,我正在考虑这个解决方案(但不想花时间,如果不可能),在运行时,对于每个注释的方法列:

  • 获取@Column注释
  • 创建列注释的副本,使用javaassist设置columnDefinition null。
  • 将列方法注释设置为复制列注释对象,覆盖旧注释对象(我不知道这是可能的)

是否有可能以这种方式“破解”这些方法?

非常感谢任何帮助......

3 个答案:

答案 0 :(得分:3)

我不认为你建议的方法是可行的,因为:

  1. 运行时get的注释值实际上是实现注释接口的代理类。您无法为其属性设置新值。
  2. 无法在运行时为类或方法设置新的注释值。
  3. 但是,您可以转到基于xml的Hibernate配置,您可以在代码外部修改参数。

答案 1 :(得分:1)

如果使用ANT构建,则可以执行预编译步骤并使用正则表达式更改文件中的代码。

答案 2 :(得分:0)

尽管如此,这实际上是一个旧线程,上面的答案2对于第2点是不正确的: 实际上,类运行可以在运行时更改。

我仍然很好奇如何为方法完成它。