2011-10-11 36 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名称和某种类型的参数映射,但我怀疑这是您所期望的。 –