Я имею в виду руководство по эксплуатации "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, по-видимому, сделал это действительно сложным!
спасибо, хотя - можете ли вы ссылаться на простой пример кода или вставить его? Я ДОЛЖЕН делать все это только для этого? И, как вы видите в моем первоначальном посте, я опубликовал весь «HibernateUtil», который я использую, - как я «вставляю» то, что мне нужно в это (например, он имеет объект EntityManager), но изменяя возможный код и без весны? – Poni
Пила обновление. Ну, видно, что на связанной странице еще нет смысла. Как это связано с моей сессией спящего режима? И что это за «менеджер1» - строка из синей? :) – Poni
Извините, мой опыт Hibernate довольно стар, несколько версий назад. Я также боролся с этими общими понятиями (API-интерфейс и реализация поставщика). Кажется, это одна область, которая не объясняется так хорошо, как может быть. Я считаю, что это просто произвольное имя, поэтому структура может отслеживать отдельных менеджеров (но не цитируйте меня на этом :-). –