我参考"Chapter 12. Criteria" in this手册。
他们很好地解释了:
javax.persistence.criteria。 CriteriaBuilder 界面是第一个 你需要熟悉开始使用标准的东西 查询。它的作用是所有单件的工厂 的标准。你获得了 javax.persistence.criteria。 CriteriaBuilder 实例通过调用 getCriteriaBuilder 方法之一 javax.persistence。 EntityManagerFactory 或 javax.persistence。的的EntityManager
但是,没有人说我在哪里/如何获得这些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");
但是我不确定它是否正常,并且关于&#34; persistenceUnitName&#34; - 那个是从哪里来的?!我应该发明一个名字吗?
最重要的是,我想要的只是搜索具有特定条件的对象 - Hibernate显然让它变得非常复杂!
答案 0 :(得分:3)
EntityManager
和EntityManagerFactory
是提供程序实现的接口。在Spring的情况下,你注入一个(见Spring ORM JPA)。
在Hibernate中,您可以使用here描述的自举技术。从那个参考:
EntityManagerFactory emf = Persistence.createEntityManagerFactory("manager1");