このような方法でコレクションを保存するジェネリック メソッドを実装できます。
抽象汎用 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
ファインダーの実装には必要なので、必要ない場合はスキップできます。このような場合、ジェネリック クラスは 1 つしか記述できません (各エンティティの抽象クラスとサブクラスは記述できません)。
これは、Hibernate と JPA を使用した汎用 DAO の作成に関する非常に優れた記事です。