java - Hibernate CriteriaQuery<T> - 任何直接的代码示例?

标签 java hibernate criteria hibernate-criteria

我指的是 "Chapter 12. Criteria" in this手册。

他们很好地解释了:

The javax.persistence.criteria.CriteriaBuilder interface is the first thing with which you need to become acquainted to begin using criteria queries. Its role is that of a factory for all the individual pieces of the criteria. You obtain a javax.persistence.criteria.CriteriaBuilder instance by calling the getCriteriaBuilder method of either javax.persistence.EntityManagerFactory or javax.persistence.EntityManager.

但是,没有人说我在哪里/如何获得这些 EntityManager/EntityManagerFactory 对象。抱歉,不清楚。

我觉得它与我的 Hibernate session 有关,所以这是我的 session 代码,让我知道是否/如何更改它以获得 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 显然使它变得非常复杂!

最佳答案

EntityManagerEntityManagerFactory 是提供者实现的接口(interface)。在 Spring 的情况下,您注入(inject)一个(参见 Spring ORM JPA)。

在 Hibernate 中,您可以使用描述的自举技术 here .从那个引用:

EntityManagerFactory emf = Persistence.createEntityManagerFactory("manager1");

关于java - Hibernate CriteriaQuery<T> - 任何直接的代码示例?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11058398/

相关文章:

hibernate - 使 hibernate 状态在select子句中不包括联接表中的字段

Hibernate @OnDelete 级联同表

hibernate - 一对多映射到父类(super class)的属性

java - HQL 查询是否总是命中数据库并获得结果?

hibernate - Criterion Restrictions.like 以及数字和日期

java - 为什么我的 Ant 主构建文件不能正常工作?

java - 线程池性能

java - Spring 应用程序上下文加载顺序

java - JEdi​​torPane 中带有超链接的本地 HTML 将被方法拦截

java - JPA 标准在所选日期上添加一天