如何动态填充注释

时间:2010-06-21 18:58:46

标签: java hibernate persistence annotations

可悲的是,我今天忘了带代码与我合作。但也许这个小例子可以澄清事情。

我使用hibernate将bean映射到表。

示例:

import javax.persistence.column;
….
String columnameA;
….
@Column(name="columnameA")
public String getColumname(){
  return columnameA
}
….

我不想在源代码中硬编码列名(“ columnameA ”),因为我需要在不构建整个项目的情况下切换列名。 我想使用类似的东西:

@Column(name=getColumnName())

这不起作用。这个想法是,在jndi树中的某处写一个列名,并在启动时使用它。所以我只需要重新启动应用程序来更改列名。

解决这个问题的唯一方法 - 我能想到的 - 是编写我自己的注释,它扩展了hibernate类。有没有更简单的方法呢?

2 个答案:

答案 0 :(得分:1)

您无法通过注释实现此目标,但针对您的具体问题的解决方案是实施自定义NamingStrategy

public class NamingStrategyWrapper implements NamingStrategy {
    private NamingStrategy target;

    public NamingStrategyWrapper(NamingStrategy target) {
        this.target = target;
    }

    public String columnName(String arg0) {
        if ("columnameA".equals(arg0)) return getColumnName();
        else return target.columnName(arg0);        
    }

    ...
}

-

AnnotationConfiguration cfg = new AnnotationConfiguration();
cfg.setNamingStrategy(new NamingStrategyWrapper(cfg.getNamingStrategy()));
factory = cfg.configure().buildSessionFactory();

答案 1 :(得分:0)

您可以为属性指定的唯一值是常量值,可以手动指定,也可以存储在public static final个变量中。

注释不定义行为,而只定义关于类,方法等的元信息。您可以在注释处理器中指定行为,读取注释并生成新的源代码或其他文件。

编写注释processo是我所不知道的,但您可以在Sun的Annotations Processing Tool指南中找到其他信息。