0

ユーザーが使用できるメソッドは 1 つだけです。フロントエンドから 1 つのメソッドを使用して、あらゆる種類のコレクションを保存できる必要があります。

save(Collection<foo> bar) 

注釈付きの最新の Hibernate を使用しています。

このバックエンドを実装するにはどうすればよいですか? 基本的に、コレクション内にあるオブジェクトを理解する必要があります。

問題は、DB 内のすべてのテーブルに save メソッドを作成したくない、ジェネリックにしたいということです。または、これが不可能な場合、他のアイデア、使用するロジックは何ですか?

4

1 に答える 1

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ファインダーの実装には必要なので、必要ない場合はスキップできます。このような場合、ジェネリック クラスは 1 つしか記述できません (各エンティティの抽象クラスとサブクラスは記述できません)。

これは、Hibernate と JPA を使用した汎用 DAO の作成に関する非常に優れた記事です

于 2012-08-11T19:17:51.433 に答える