АвтоАвтоматизацияАрхитектураАстрономияАудитБиологияБухгалтерияВоенное делоГенетикаГеографияГеологияГосударствоДомДругоеЖурналистика и СМИИзобретательствоИностранные языкиИнформатикаИскусствоИсторияКомпьютерыКулинарияКультураЛексикологияЛитератураЛогикаМаркетингМатематикаМашиностроениеМедицинаМенеджментМеталлы и СваркаМеханикаМузыкаНаселениеОбразованиеОхрана безопасности жизниОхрана ТрудаПедагогикаПолитикаПравоПриборостроениеПрограммированиеПроизводствоПромышленностьПсихологияРадиоРегилияСвязьСоциологияСпортСтандартизацияСтроительствоТехнологииТорговляТуризмФизикаФизиологияФилософияФинансыХимияХозяйствоЦеннообразованиеЧерчениеЭкологияЭконометрикаЭкономикаЭлектроникаЮриспунденкция

Configuration, Session и SessionFactory

Читайте также:
  1. My session counter: 1
  2. Session.createQuery(“from Company”)
  3. Тема 4. Сеансовый уровень (Session layer)

Ниже будет приведено несколько вариантов конфигурирования 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:


1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | 95 | 96 | 97 | 98 | 99 | 100 | 101 | 102 | 103 | 104 | 105 | 106 | 107 | 108 | 109 | 110 | 111 | 112 | 113 | 114 | 115 | 116 | 117 | 118 | 119 | 120 | 121 | 122 | 123 | 124 | 125 | 126 | 127 | 128 | 129 | 130 | 131 | 132 | 133 | 134 | 135 | 136 | 137 | 138 | 139 | 140 | 141 | 142 | 143 |

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



Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Студалл.Орг (0.004 сек.)