1

このマニュアルの「第 12 章 基準」を参照してください。

彼らはそれをうまく説明しています:

javax.persistence.criteria. CriteriaBuilderインターフェースは、基準クエリを使用するために最初に理解する必要があるものです。その役割は、基準のすべての個々の部分の工場の役割です。javax.persistence.criteria を取得します。いずれかの javax.persistenceのgetCriteriaBuilderメソッドを呼び出してCriteriaBuilderインスタンスを 作成します。EntityManagerFactoryまたは javax.persistence. エンティティマネージャー

しかし、これらの EntityManager/EntityManagerFactory オブジェクトをどこでどのように取得するかは誰にもわかりません。申し訳ありませんが、それは不明です。

私はそれが私のHibernateセッションに関係していると感じたので、ここに私のセッションコードがありEntityManagerます.オブジェクトを取得するためにそれを変更するかどうか/どのように変更するかを教えてください.

import java.io.Serializable;

import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;
import org.hibernate.service.ServiceRegistry;
import org.hibernate.service.ServiceRegistryBuilder;

import x.Debug;

public class HibernateUtil {

    private static final int            DEFAULT_TRANSACTION_TIMEOUT = 3;

    private static final HibernateUtil  m_instance;

    private final SessionFactory        m_session_factory;
    private final ServiceRegistry       m_service_registry;

    private Session                     m_session;

    static {
        m_instance = new HibernateUtil();
    }

    public static HibernateUtil get() {
        return m_instance;
    }

    public HibernateUtil() {
        Configuration configuration = new Configuration();
        configuration.configure();
        this.m_service_registry = new ServiceRegistryBuilder().applySettings(
                configuration.getProperties()).buildServiceRegistry();
        this.m_session_factory = configuration
                .buildSessionFactory(this.m_service_registry);

        this.open_session();
    }

    public void open_session() {
        this.m_session = this.m_session_factory.openSession();
    }

    public void close_session() {
        this.m_session.close();
    }

    public Session get_session() {
        if (!this.m_session.isOpen())
            this.open_session();
        return this.m_session;
    }

    public void save_or_update_objects(final Object[] objects) {
        final Session session = this.get_session();

        try {
            // session.beginTransaction();
            session.getTransaction().setTimeout(DEFAULT_TRANSACTION_TIMEOUT);
            session.getTransaction().begin();

            for (final Object object : objects)
                session.saveOrUpdate(object);

            session.getTransaction().commit();
        } catch (RuntimeException e) {
            session.getTransaction().rollback();
            throw e;
        }
    }

    public Object get_object(final Class<?> clazz, final Serializable id) {
        final Session session = this.get_session();

        if (Debug.DEBUG)
            session.clear();

        final Object ret = session.get(clazz, id);

        return ret;
    }
}

私が見つけたのは、単純に、Hibernate とは関係なく、ビルドする方法EntityManagerFactoryです。コードは次のとおりです。

final EntityManagerFactory entity_manager = Persistence.createEntityManagerFactory("persistenceUnitName");

しかし、私はそれが大丈夫かどうか確信が持てず、「persistenceUnitName」に関して - それはどこから来たのですか?! 私は名前を発明する必要がありますか?

要するに、私が望んでいたのは、特定の基準でオブジェクトを検索することだけでした.Hibernate は明らかにそれを非常に複雑にしました!

4

1 に答える 1