使用属性类型信息Hibernate NamingStrategy

时间:2009-05-04 13:33:54

标签: java hibernate

我正在为我们的架构编写一个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属性的类型?

提前致谢。

1 个答案:

答案 0 :(得分:1)

我不认为界面的设计考虑到了这一点 - 乍一看,似乎没有任何方法可以知道 propertyToColumnName()的调用者正在询问哪个类< / p>

但是,我注意到 propertyToColumnName()的javadoc表示它返回“... 属性路径表达式的列名”。可能值得研究一下Hibernate将这个String传递给这个方法:如果它实际上是完全限定了类名,那么你可以解析出类名并在该类上使用反射来确定属性类型。

或者,不要忘记您始终可以直接在映射文件中指定列名称(或者如果您使用它们,可以在注释中指定):

&lt; property name =“blah”column =“intblah”/&gt;

这可能是一种更简单的方法。