2012-06-15 3 views
1

Я имею в виду руководство по эксплуатации "Chapter 12. Criteria" in this.Hibernate CriteriaQuery <T> - любой пример прямого кода?

Они прекрасно объясняют, что:

javax.persistence.criteria. КритерииBuilder интерфейс является первым , с которым вам нужно познакомиться, чтобы начать использовать критерии запросов. Его роль принадлежит фабрике для всех отдельных предметов критериев. Вы получаете javax.persistence.criteria. КритерииBuilder экземпляр, позвонив по телефону 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"); 

Но я не уверен, что это нормально, и в отношении «persistenceUnitName» - Откуда это пришло?! Должен ли я просто придумать имя?

Суть в том, что все, что я хотел, это поиск объектов с определенными критериями - Hibernate, по-видимому, сделал это действительно сложным!

ответ

3

EntityManager и EntityManagerFactory - это интерфейсы, которые реализует поставщик. В случае с весной вы вводите один (см. Spring ORM JPA).

В Hibernate вы можете использовать описанную технику самонастройки here. Из этой справки:

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

спасибо, хотя - можете ли вы ссылаться на простой пример кода или вставить его? Я ДОЛЖЕН делать все это только для этого? И, как вы видите в моем первоначальном посте, я опубликовал весь «HibernateUtil», который я использую, - как я «вставляю» то, что мне нужно в это (например, он имеет объект EntityManager), но изменяя возможный код и без весны? – Poni

+0

Пила обновление. Ну, видно, что на связанной странице еще нет смысла. Как это связано с моей сессией спящего режима? И что это за «менеджер1» - строка из синей? :) – Poni

+0

Извините, мой опыт Hibernate довольно стар, несколько версий назад. Я также боролся с этими общими понятиями (API-интерфейс и реализация поставщика). Кажется, это одна область, которая не объясняется так хорошо, как может быть. Я считаю, что это просто произвольное имя, поэтому структура может отслеживать отдельных менеджеров (но не цитируйте меня на этом :-). –

Смежные вопросы