2011-10-11 69 views
4

我在一個項目中有很多實體,我需要爲它們中的每一個創建一個數據訪問對象。我認爲這些DAO將是無狀態的會話bean,每個都有一個實體管理器注入它(我不確定這個,但是因爲我將在JBoss AS的上下文中使用它們,這看起來是合理的。 )。
有沒有可以掃描我的實體類,處理它們的註釋併爲我生成這些bean的任何工具(理想情況下,一個maven插件)?每個bean應該公開創建或刪除實體的方法,以及作爲單獨方法的其相應實體類的每個命名查詢。 更確切地說,我想要這樣的文章:
http://community.jboss.org/people/ilya40umov/blog/2011/01/06/genericejb-based-jpa-entitymanager-extension
但每個命名查詢具有不同的方法。 我將使用JPA 2.0和Hibernate 4.0。提前致謝!
編輯:愚蠢的我,我忘了提,我沒有使用彈簧和術語DAO只是用來說明我想要什麼......需要用於實體DAO的代碼生成工具

回答

1

看看你可以使用泛型和反射,使類似的東西

public interface IDao<T> { 


public <A extends Serializable> T getElementByID(A x); 

public Long getRowsCount(); 

public List<T> getAll(); 

public List<T> getAll(String order); 

public void saveOrUpdateElement(T x); 

public void updateElement(T x); 

public void saveElement(T x); 

public void deleteElement(T x); 

public void setClase(Class<T> clase); 

public Class<T> getClase(); 

public void mergeElement(T x); 

public T getFirst(); 

}

的方法public void setClase(類化酶);讓所有去魔法,所以如果您需要查詢爲x,那麼你設置的類別和例如GETALL(的implementaton)將

public List<T> getAll(){ 
    return session.createQuery("from "+getClase().getSimpleName()).list(); 

}

+1

如果涉及到基本的CRUD操作,我還會選擇通用DAO接口和特定的實體類型實現。 但是,這並沒有解決自動命名查詢發現和方法生成上述OP的問題。您當然可以在您的CRUD界面中使用namedQuery名稱和某種類型的參數映射,但我懷疑這是您所期望的。 –