Hibernate 4 ORM: подключение и настройка
Установка
Подключить Hibernate 4 к проекту можно двумя способами:
- Скачать последнюю версию пакета библиотеки с официального сайта и подключить jars к проекту. В каждом пакете помимо jar-файлов содержатся также документация и исходный код. Последнюю версию Hibernate можно найти по этой ссылке. Обязательным является подключение в проект только jar-файлов из директории \lib\required. Остальные подключаются по мере необходимости.
- Использовать Maven dependencies. Hibernate предоставляет ряд артефактов в группе org.hibernate :
- hibernate-core — основной обязательный артефакт, необходимый для запуска приложений с использованием Hibernate API;
- hibernate-entitymanager — представляет собой реализацию JPA в Hibernate. Java Persistence API (JPA) — API, предоставляющие возможность сохранять в удобном виде Java-объекты в базе данных
- hibernate-envers — опциональный модуль, который предоставляет возможность ведения истории изменений в сущностях. Требует подключения hibernate-core и hibernate-entitymanager;
- hibernate-c3p0 — предоставляет интеграцию Hibernate с библиотекой пула подключений C3P0;
- hibernate-proxool — предоставляет интеграцию Hibernate с библиотекой пула подключений Proxool;
- hibernate-ehcache — предоставляет интеграцию Hibernate с EhCache, в качестве кеша второго уровня;
- hibernate-infinispan — предоставляет интеграцию Hibernate с Infinispan, в качестве кеша второго уровня;
Последние 4 модуля обычно подключаются в проект как runtime зависимости и работают автоматически.
Настройка
Настройку Hibernate можно выполнить 4 способами: с помощью конфигурационного файла hibernate.cfg.xml , динамически в коде, с помощью установки System Properties и при помощи файла hibernate.properties. Рассмотрим первые два варианта как наиболее часто используемые.
hibernate.cfg.xml
Пример конфигурационного файла:
По умолчанию Hibernate ищет этот файл в корневой папке src директорий ( «/hibernate.cfg.xml» ). Но при необходимости ему можно задать любое месторасположение, об этом речь пойдет немного позже.
Вся работа в Hibernate осуществляется через сессии. Для запуска Hibernate необходимо создать глобальный объект org.hibernate.SessionFactory и хранить его где-нибудь в коде приложения. org.hibernate.SessionFactory используется для получения экземпляров org.hibernate.Session . Сессии представляют собой однопоточные элементы для каждой отдельной задачи. Фабрика сессий — это потокобезопасный глобальный объект, который нужно инициализировать всего один раз.
Пример вспомогательного класса HibernateUtil, который выполняет запуск и делает доступ к org.hibernate.SessionFactory более удобным:
Строка new Configuration().configure(); как раз отвечает за поиск файла hibernate.cfg.xml . Для доступа к файлу настроек с нестандартным месторасположением можно использовать вместо этой строки следующий код:
Динамическая конфигурация Hibernate
Настройка конфигурации Hibernate в коде позволяет организовать более гибкую работу по подключению к БД, чем статичный файл, особенно при наличии нескольких БД. Пример настойки:
Источник
nitincoded / GrizzlyHelper.java
import com.fasterxml.classmate.AnnotationConfiguration ; import org.hibernate.HibernateException ; import org.hibernate.Session ; import org.hibernate.SessionFactory ; import java.util.Properties ; /** * Created by Developer on 1/7/17. */ public class GrizzlyHelper < private static final SessionFactory concreteSessionFactory; static < try < Properties prop = new Properties (); prop . setProperty( » hibernate.connection.url » , » jdbc:mysql://192.168.0.101:3306/go » ); prop . setProperty( » hibernate.connection.username » , » go » ); prop . setProperty( » hibernate.connection.password » , » go » ); prop . setProperty( » dialect » , » org.hibernate.dialect.MySQLDialect » ); prop . setProperty( » hibernate.hbm2ddl.auto » , » create » ); concreteSessionFactory = new org.hibernate.cfg . Configuration () .addProperties(prop) // .addPackage(«com.kat») .addAnnotatedClass( Vehicle . class) .buildSessionFactory() ; > catch ( Exception ex) < throw new ExceptionInInitializerError (ex); > > public static Session getSession () throws HibernateException < return concreteSessionFactory . openSession(); > > /* import javax.persistence.*; @Entity @Table(name = «vehicle») public class Vehicle < @Id @GeneratedValue private int id; @Column(name=»plateno») private String plate; public int getId() < return id; > public void setId(int id) < this.id = id; > public String getPlate() < return plate; > public void setPlate(String plate) < this.plate = plate; > > */ /* import org.hibernate.Session; import java.util.List; public class Grizzly < public static void main(String[] args) < Session sess = GrizzlyHelper.getSession(); sess.beginTransaction(); List lstVeh = sess.createCriteria(Vehicle.class).list(); System.out.println(lstVeh.size()); sess.close(); > > */ /* org.hibernate hibernate-core 5.2.5.Final mysql mysql-connector-java 6.0.5 */ You can’t perform that action at this time.
You signed in with another tab or window. Reload to refresh your session. You signed out in another tab or window. Reload to refresh your session.
Источник
Конфигурация Hibernate4 без файлов xml — sessionFactory имеет значение null
У меня есть веб-проект, работающий с Spring3 и Hibernate4, и теперь я хочу протестировать DAO без использования xml файлов. Для этого я создал класс, который создает LocalSessionFactoryBean с данными, содержащимися в файле xml приложения и простым тестовым классом.
Однако sessionFactory, возвращаемый localSessionFactoryBean.getObject(), имеет значение NULL. Я рассматривал некоторые примеры, такие как this, и они имеют ту же проблему, когда я изменяю их для работы без Spring. У вас есть идеи?
Это код, который подготавливает sessionFactory:
И это простой тестовый класс, который его использует:
Попробуйте добавить эту строку
в методе после того, как были установлены свойства LocalSessionFactoryInstance . Ваш метод будет выглядеть как
public void afterPropertiesSet() вызывает IOException
Вызывается BeanFactory после того, как он установил все предоставленные свойства bean (и удовлетворены BeanFactoryAware и ApplicationContextAware). Этот метод позволяет экземпляру bean выполнять инициализацию только тогда, когда были установлены все свойства bean и выдавать исключение в случае неправильной конфигурации.
В вашем случае, я думаю, вам нужно вызвать его в свой код вручную.
Я спросил, как это сделать без XML файла, и решение, предложенное @Octopus, исправило проблему, с которой я столкнулся. Однако после исправления возникших других ошибок с транзакциями. поэтому я решил сделать это по-другому, что не мешает приложению.
Для этого я создал упрощенную версию xml файла в /src/test/resources, удалив многие конфигурации типа c3p0 one и hardcoding значения, чтобы тесты не сбой, если файлы свойств приложения изменены.
Это содержимое файла xml:
В тестовом классе я использовал JUnit, потому что мне не удалось это сделать с TestNG, хотя я пытался расширить AbstractTestNGSpringContextTests. Я бы рекомендовал использовать версию JUnit 4.4 вместо более новых версий, потому что у нее есть классы, такие как AssumptionViolatedException, которые используются spring -test 2.5.
Я надеюсь, что это поможет вам в ваших будущих событиях
Источник
Настройка JPA / Hibernate/PostgreSQL без XML
Я возвращаюсь в мир Java и пытаюсь настроить новое веб-приложение Spring с JPA, Hibernate и PostgreSQL.
Я нашел много старых примеров с различными файлами конфигурации XML, и мне интересно, есть ли предпочтительный новый способ выполнить эту конфигурацию, не полагаясь на создание XML-файлов.
Некоторые из вещей, которые мне нужно настроить, — это диалект hibernate sql, драйвер и т. д.
2 ответов:
Поместите следующие фрагменты в класс с аннотациями @Configuration и @EnableTransactionManagement
Hibernate/JPA (редактирование строки packagesToScan):
Источник данных (изменить имя пользователя, пароль и адрес хоста):
Если вы собираетесь использовать spring , я рекомендую использовать Spring Boot , который предлагает множество автоматических конфигураций. вы можете использовать application.properties настройки dialect С и
Spring Boot предоставляет рядстартовых пакетов , которые позволяют легко добавлять банки в ваш путь к классу. Эти начальные пакеты просто предоставляют зависимости, которые могут понадобиться при разработке конкретного типа приложения. Поскольку вы разрабатываете, возможно, веб-приложение, которое требует доступа к данным, вам следует добавьте их к вашему pom.xml :
В основном spring boot пытается угадать, как вы хотите настроить свое приложение, основываясь на добавленных зависимостях jar. spring-boot-starter-data-jpa , предоставляет следующие ключевые зависимости:
- Hibernate — одна из самых популярных реализаций JPA.
- Spring Data JPA-упрощает реализацию репозиториев на основе JPA.
- Весна платформы — Core поддержка ОРМ от весенних рамок.
Вы можете явным образом настройте параметры JPA, используя свойства spring.jpa.* . Например, для создания и удаления таблиц вы можете добавить в свой application.properties :
Вы можете прочитать больше о spring boot здесь
Источник
Configure And Create Hibernate Application Without Using Any XML
Posted By : S. Ajit | 04-Feb-2018
Hibernate is the most popular ORM framework. ORM stands for Object Relation Mapping, It is the programming technique of mapping object into data stored in the database. In this blog, we are going to create a simple hibernate program without using any XML file. We will be using annotation to eliminate XML. Annotation based configuration has these advantage over XML file.
- All information will be in a single file so no need to open two files and configure a given behavior
- When class changes there is no need to modify XML file
- XML configuration are often very long. Annotations are much simpler to use
For this blog we will be using MySQL database.
Lets first create maven project and add these dependencies to pom.xml file
Create a entity class — Employee and annotate it with @Entity annotation , This will enable Hibernate to create table automatically. @Id represent primary key field and @GeneratedValue(strategy=GenerationType.AUTO) is used for auto increment on primary key field. The below Employee class is has configuration equivalent to employee.hbm.xml file
Create a database with name hbm and then configure hibernate to make connect with database.The below configuration is equivalent to hibernate.cfg.xml . Create a properties class object and add below properties to it.
Now create a Configuration object and add these properties to it
We will add Employee to Configuration object for table creation
Build a sessionFactory object and get a session object which will be used for performing persist,delete,update and list opertaion. session object act as an interface between application and database.
To save a employee object we will use persist method of session
To get employee list we will create a query using createQuery() method of session like this:
To update a employee we will use the same createQuery() with named parameter (:param) and call its executeUpdate() method like this:
To delete a employee we will use createQuery() with positional paramater(?1,?2) and call executeUpdate() method
Источник