Java 使用属性类型信息Hibernate NamingStrategy

Java 使用属性类型信息Hibernate NamingStrategy,java,hibernate,Java,Hibernate,我正在为我们的模式编写一个Hibernate命名策略 我们的旧模式(出于某些原因!)在列名中包含类型信息。例如: strproperty intcustomer 我正在从NamingStrategy接口实现以下方法: public String propertyToColumnName(String propertyName) 我想知道上述属性的Java类型,以便实现我们的命名策略: public String getProperty() { return this.property

我正在为我们的模式编写一个Hibernate命名策略

我们的旧模式(出于某些原因!)在列名中包含类型信息。例如:

strproperty
intcustomer
我正在从NamingStrategy接口实现以下方法:

public String propertyToColumnName(String propertyName)
我想知道上述属性的Java类型,以便实现我们的命名策略:

public String getProperty() {
    return this.property()
}
将自动映射到strproperty

为了便于论证,请说明这是我设想的工作方式(我知道此方法不存在):

有没有办法从Hibernate中的命名约定挂钩中确定Java属性的类型


提前感谢。

我认为界面设计时没有考虑到这一点-乍一看,似乎没有办法知道propertyToColumnName()的调用方询问的是什么类

但是,我注意到propertyToColumnName()的javadocs说它返回“…属性路径表达式的列名”。研究Hibernate传递给这个方法的字符串可能是值得的:如果它实际上是用类名完全限定的,那么您可以解析出类名,并对该类使用反射来确定属性类型

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


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

属性路径是相对于类的,换句话说,不幸的是,您只能得到属性名。我也在使用显式映射(我在使用注释),但列映射越不显式越好,这就是为什么我试图在命名策略中完成尽可能多的工作。谢谢你的回复!
public String propertyToColumnName(Object propertyName, Class propertyType) {
    if (propertyType instanceof String) {
        return "str" + propertyName;
    } else {
        return "int" + propertyName;
    }
}