2017-04-23 101 views
3

一般我使用Hibernate的模板,並有這樣的代碼:問題,在Hibernate模板

public List<Book> findBooksByName(String name) { 
    return getHibernateTemplate().find("FROM Book WHERE name = ?", name); 
} 

我認爲它看起來不錯。但是,當我跑這個代碼,我得到了一個錯誤:

[ERROR] incompatible types 
[ERROR] required: java.util.List<com.model.Book> 
[ERROR] found: java.util.List<capture#1 of ?> 

如何解決,並得到我需要什麼?先謝謝你!

回答

1

據我所知,您正在擴大HibernateDaoSupport,如this example中所述。 getHibernateTemplate()將返回一個HibernateTemplate沒有任何類型的規範。沒關係,因爲HibernateTemplate沒有類型參數。

所以這個find(...)方法將返回一個List對象。實際的Hibernate代碼可能會返回List of HibernateProxy實例。此HibernateProxy是您的域類的自動生成的子類,在這種情況下爲Book

因此,所有你能做的就是結果轉換爲正確類型的列表:

public List<? extends Book> findBooksByName(String name) { 
    return (List<? extends Book>) getHibernateTemplate().find("FROM Book WHERE name = ?", name); 
} 

這會讓你的List有效只讀。這是我們爲ORM便利支付的價格。