可悲的是,我今天忘了带代码与我合作。但也许这个小例子可以澄清事情。
我使用hibernate将bean映射到表。
示例:
import javax.persistence.column;
….
String columnameA;
….
@Column(name="columnameA")
public String getColumname(){
return columnameA
}
….
我不想在源代码中硬编码列名(“ columnameA ”),因为我需要在不构建整个项目的情况下切换列名。 我想使用类似的东西:
@Column(name=getColumnName())
这不起作用。这个想法是,在jndi树中的某处写一个列名,并在启动时使用它。所以我只需要重新启动应用程序来更改列名。
解决这个问题的唯一方法 - 我能想到的 - 是编写我自己的注释,它扩展了hibernate类。有没有更简单的方法呢?
答案 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指南中找到其他信息。