2009-05-04 42 views
2

我正在爲我們的模式編寫一個Hibernate NamingStrategy。使用屬性類型信息休眠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; 
    } 
} 

有沒有辦法從命名中確定的Java屬性的類型Hibernate中的常規鉤子?

在此先感謝。

回答

1

我不認爲接口設計考慮到這一點 - 乍看似乎並不像有什麼辦法可以知道propertyToColumnName()的來電者詢問一下班約

然而,我注意到propertyToColumnName()的javadoc說它返回「... 屬性路徑表達式的列名稱」。可能值得研究Hibernate傳遞給這個方法的String是什麼:如果它實際上是用類名完全限定的,那麼你可以解析出類名並使用該類的反射來確定屬性類型。

另外,別忘了你可以隨時在你的映射文件直接指定列名(或在註解,如果你使用它們,我猜):

<屬性名=「嗒嗒」列=」 intblah「/ >

這可能是一個更簡單的方法。

+0

屬性路徑是相對於類,換句話說,不幸的是你只是得到屬性名稱。 我也使用顯式映射(我使用註釋),但不明確的列映射更好,這就是爲什麼我試圖在命名策略中完成儘可能多的工作。 感謝您的回覆! – bowsie 2009-05-05 09:38:11