2012-10-24 111 views
2

我有一個通用類,這是一些非通用類的父類和那些只設置這樣的泛型參數:冬眠通用繼承

@ManagedProperty 
class A<T>{ 
    @Id 
    getId(){..} 
    setID(int id){..} 
    int id 

    T t; 
    T getT(){...} 
    setT(T t){...} 
} 

@Entity 
class B extends A<Integer>{} 

,但我得到MappingException說:

它有一個未綁定類型,沒有明確的目標實體。解決此通用用法問題或設置明確的目標屬性。

我該如何解決?

+1

嘗試閱讀雖然這個線程:) http://stackoverflow.com/questions/7000428/using-休眠與 - 仿製藥 – JustDanyul

回答

0

你的例子不能工作。 getT()被定義爲包專用,這意味着它在子類B中不可見。當Hibernate用反射來解析類時,它可以找到方法getT(),但由於此方法在子類中不可見,因此反射會不提供它的類型。

你可以做什麼:

  1. 定義GETT()作爲公共或至少受到保護。 (我不知道這是否能解決您的問題。)
  2. 使用@Type註釋來定義Hibernate的具體類型(想想那麼你可能會失去你用通用類獲得的優勢)
  3. 使用xml配置文件而不是類B的註釋。您將爲類B定義配置,您甚至可以設置僅在超類中定義爲私有或包私有的成員和獲取者的類型。
  4. 除了1.你還在B中定義了方法getT(),你只需要調用super.getT()。

我總是這樣向3 - 我不喜歡的註解反正;-)