2012-08-11 38 views
0

用户休眠后台只有一个使用这种方法,他必须能够用一个方法从前端保存任何类型的集合:创建为通用节省方法

save(Collection<foo> bar) 

我使用的是最新的Hibernate与注释。

如何为此执行后端?基本上我需要它来理解,Collection中有什么对象。

问题是,我不想为我的数据库中的每个表创建一个保存方法,想做通用的。或者如果这是不可能的,一些其他的想法,使用什么逻辑?

回答

0

您可以实现以这种方式保存集合的泛型方法。

创建抽象通用的DAO类:

public abstract class AbstractHibernateDAO<T> { 

    private final Class<T> clazz; 

    @Autowired 
    private SessionFactory sessionFactory; 

    public AbstractHibernateDAO(Class<T> clazz) { 
     this.clazz = clazz; 
    } 

    public void saveCollection(Collection<T> entities) { 
     for (T t: entities) { 
      sessionFactory.getCurrentSession().save(t); 
     } 
    } 

    // Other CRUD methods. 

} 

一些实体具体实现DAO的:

@Repository 
@Transactional 
public class TestEntityHibernateDAO extends AbstractHibernateDAO<TestEntity> { 

    public TestEntityHibernateDAO() { 
     super(TestEntity.class); 
    } 

} 

Class<T> clazz有必要实施发现者,那么可以跳过这个如果你不这样做需要他们。在这种情况下,您只能编写一个泛型类(不是每个实体的抽象类和子类)。

Here是关于使用Hibernate和JPA创建泛型DAO的非常好的文章。