Configuration, Session и SessionFactory




Ниже будет приведено несколько вариантов конфигурирования Hibernate. Конфигурация или отображение (mapping) обычно осуществляется один раз
в течение работы приложения. Конкретная конфигурация содержится в объекте класса net.sf.hibernate.cfg.Configuration.

private Configuration createConfiguration()

throws ClassNotFoundException, MappingException {

Configuration configuration =

new Configuration().addClass(Class.forName("courses.hiber.Course"))

.addClass(Class.forName("courses.hiber.Student"));

return configuration;

}

Этот метод создает новую конфигурацию и добавляет в нее классы courses.hiber.Course и courses.hiber.Student (данное добавление необходимо только в том случае, если mapping-файлы не были указаны в конфигурационном файле Hibernate). Hibernate ищет mapping по принципу, указанному выше. В конфигурацию могли быть также добавлены другие источники mapping, например поток, jar-файл, org.dom4j.Document. Метод addClass() возвращает объект Configuration, поэтому он вызывается несколько раз подряд. Далее добавляется в приложение метод, генерирующий по конфигурации таблицы в базе данных.

Hibernate содержит консольное приложение для генерации скриптов. В приведенном ниже коде объект класса SchemaExport генерирует таблицы базы данных по настроенному mapping и заданным свойствам, записывает текст
в файл (c:/temp/courses_script.sql) и выполняет сгенерированный SQL-код.

private void generateAndExecuteCreationScript(Configuration configuration, Properties properties) throws HibernateException {

SchemaExport export = new SchemaExport(configuration, properties);

export.setOutputFile("c:\\temp\\courses_script.sql").create(true, true);

}

В методе create(true, true) генерируется script-текст для создания таблиц и посылается на консоль (определяется первым параметром – true), и на его основе создаются таблицы в базе данных (второй параметр – true).

Session – это интерфейс, используемый для сохранения в базу данных и восстановления из нее объектов классов Course и Student. SessionFactory – потокобезопасный, неизменяемый кэш откомпилированных mapping для одной базы данных, фабрика для создания объектов Session.

1. Создается объект SessionFactory

SessionFactory factory = new Configuration().configure().buildSessionFactory();

Метод configure() класса Configuration заносит информацию
в объект Configuration из конфигурационного файла Hibernate;

2. Создается сессия

Session session = factory.openSession();

3. Извлекаются все строки из таблиц course и student. Текст запросов
и команд пишется на Hibernate-диалекте. Он похож на SQL, только в качестве сущностей-носителей данных выступают классы, а не таблицы.

List courses = session.find("from Course");

List students = session.find("from Student");

4. В конце обращения сессия закрывается.

session.close();

Интерфейс net.sf.hibernate.SessionFactory содержит ряд необходимых методов:

openSession() – создает соединение с базой данных и открывает сессию. В качестве параметра может быть передано и соединение, тогда будет создана сессия по существующему соединению;

close() – уничтожение SessionFactory и освобождение всех ресурсов, используемых объектом.

Интерфейс net.sf.hibernate.Session – однопоточный, короткоживущий объект, являющийся посредником между приложением и хранилищем долгоживущих объектов, используется для навигации по объектному графу или для поиска объектов по идентификатору. По сути, является классом-оболочкой вокруг JDBC-соединения. В то же время представляет собой фабрику для объектов Transaction.

load(Class theClass, Serializable id) – возвращает объект данного класса с указанным идентификатором;

load(Object object, Serializable id) – загружает постоянное состояние объекта с указанным идентификатором в объект, указатель которого был передан;

save(Object object [, Serializable id]) – сохраняет переданный объект. Если передан идентификатор, то использует его;

update(Object object [, Serializable id]) – обновляет постоянный объект по идентификатору объекта, а если передан идентификатор, то обновляет объект с указанным идентификатором;

saveOrUpdate(Object object) – в зависимости от значения идентификатора сохраняет или обновляет объект;

get(Class class, Serializable id) – возвращает объект дан­ного класса, с указанным идентификатором или null, если такого объекта нет;

delete(Object object) – удаляет объект из базы данных;

delete(String query) – удаляет все объекты, полученные по запросу. Возможен и вызов запроса с параметрами delete(String query,
Object[] objects, Type[] types)
;

Transaction beginTransaction() – начинает единицу работы
и возвращает ассоциированную транзакцию.

Для осуществления запросов используется экземпляр интерфейса org.hibernate.Query. Получить его можно с помощью объекта Session:



Поделиться:




Поиск по сайту

©2015-2024 poisk-ru.ru
Все права принадлежать их авторам. Данный сайт не претендует на авторства, а предоставляет бесплатное использование.
Дата создания страницы: 2016-02-16 Нарушение авторских прав и Нарушение персональных данных


Поиск по сайту: