2012-05-17 61 views
1

我正在嘗試將遺留應用程序轉換爲休眠狀態。如何在Hibernate的數據庫中從字符串FQN實例化一個類?

我有一個實體有一個字段,應根據數據庫中的完全限定名稱字符串實例化爲對象實例。

請考慮下面的示例 - 如果我在數據庫中有somePackageName.FirstClass,則someObject字段應該是FirstClass的實例。

我想我可以使用屬性訪問和持久/檢索一個字符串,但這看起來並不優雅。

我不能使用@PostLoad等 - 我用彈簧(而不是JPA)純粹的休眠 - 這些註釋被忽略。

我知道例如在MyBatis中,可以註冊一個字段的自定義處理程序。在Hibernate中會有類似的東西嗎?

我是新來的冬眠,所以我不確定選項是什麼。

@Entity 
class SomePersistentClass{ 
    private SomeInterface someObject; 

} 

class FirstClass implements SomeInterface{ 
} 

class SecondClass implements SomeInterface{ 
} 
+1

如果您正在使用'@ Entity',那麼您*正在使用JPA。 – skaffman

+0

@skaffman使用JPA批註和使用JPA API是有區別的。持久性提供者只是利用JPA定義的註釋作爲提供映射元數據的基本手段。對於大多數人來說,我會說,使用JPA註釋並不是「使用JPA」。相反,我認爲對於大多數開發人員來說,「使用JPA」意味着使用JPA API –

回答

0

您可以使用JPA的功能,如@PostLoad,等回調僅僅通過使適當的Hibernate事件偵聽器。有關詳細信息,請查閱Hibernate EntityManager指南。

但是這個更容易。這是Hibernate中Type的作用。首先,你必須編寫一個org.hibernate.type.Type或org.hibernate.usertype.UserType的實現,並指定處理轉換的@Type(type = ...)(大量關於寫作的web資源自定義Hibernate類型)。然後使用@Type註解您的'someObject'屬性(type =「your.custom.TypeImpl」)

相關問題