我正在为我们的架构编写一个Hibernate NamingStrategy。
我们的旧架构(出于某种原因!)包括列名称中的类型信息。例如:
strproperty
intcustomer
我正在从NamingStrategy界面实现以下方法:
public String propertyToColumnName(String propertyName)
我想知道上面属性的Java类型,以便我可以实现我们的命名策略:
public String getProperty() {
return this.property()
}
会自动映射到strproperty。
为了论证,说这是我设想它的工作方式(我知道这种方法不存在):
public String propertyToColumnName(Object propertyName, Class propertyType) {
if (propertyType instanceof String) {
return "str" + propertyName;
} else {
return "int" + propertyName;
}
}
有没有办法从Hibernate的命名约定钩子中确定Java属性的类型?
提前致谢。
答案 0 :(得分:1)
我不认为界面的设计考虑到了这一点 - 乍一看,似乎没有任何方法可以知道 propertyToColumnName()的调用者正在询问哪个类< / p>
但是,我注意到 propertyToColumnName()的javadoc表示它返回“... 属性路径表达式的列名”。可能值得研究一下Hibernate将这个String传递给这个方法:如果它实际上是完全限定了类名,那么你可以解析出类名并在该类上使用反射来确定属性类型。
或者,不要忘记您始终可以直接在映射文件中指定列名称(或者如果您使用它们,可以在注释中指定):
&lt; property name =“blah”column =“intblah”/&gt;
这可能是一种更简单的方法。