Меню

Создать файл конфигурации сопоставления

Hibernate — Примеры

Давайте теперь возьмем пример, чтобы понять, как мы можем использовать Hibernate для обеспечения персистентности Java в автономном приложении. Мы пройдем различные этапы создания приложения Java с использованием технологии Hibernate.

Создать классы POJO

Первым шагом в создании приложения является создание класса или классов Java POJO в зависимости от приложения, которое будет сохранено в базе данных. Давайте рассмотрим наш класс Employee с методами getXXX и setXXX, чтобы сделать его совместимым с JavaBeans классом.

POJO (обычный старый Java-объект) — это Java-объект, который не расширяет и не реализует некоторые специализированные классы и интерфейсы, требуемые инфраструктурой EJB соответственно. Все обычные объекты Java являются POJO.

Когда вы разрабатываете класс для сохранения в Hibernate, важно предоставить совместимый с JavaBeans код, а также один атрибут, который будет работать как индексный атрибут id в классе Employee.

Создать таблицы базы данных

Вторым шагом будет создание таблиц в вашей базе данных. Там будет одна таблица, соответствующая каждому объекту, вы готовы предоставить постоянство. Рассмотрим выше объекты должны быть сохранены и извлечены в следующую таблицу RDBMS —

Создать файл конфигурации сопоставления

На этом этапе создается файл сопоставления, который инструктирует Hibernate, как сопоставить определенный класс или классы с таблицами базы данных.

Вы должны сохранить документ сопоставления в файле в формате .hbm.xml. Мы сохранили наш документ сопоставления в файле Employee.hbm.xml. Давайте посмотрим немного подробнее о картографическом документе —

Документ сопоставления — это документ XML, имеющий в качестве корневого элемента , который содержит все элементы .

Элементы используются для определения конкретных отображений из классов Java в таблицы базы данных. Имя класса Java указывается с помощью атрибута name элемента class, а имя таблицы базы данных указывается с помощью атрибута table .

Элемент является необязательным и может использоваться для создания описания класса.

Элемент сопоставляет атрибут уникального идентификатора в классе с первичным ключом таблицы базы данных. Атрибут name элемента id ссылается на свойство в классе, а атрибут column ссылается на столбец в таблице базы данных. Атрибут type содержит тип отображения hibernate, при этом типы отображения преобразуются из Java в тип данных SQL.

Элемент в элементе id используется для автоматической генерации значений первичного ключа. Атрибут class элемента генератора установлен на native, чтобы позволить hibernate подобрать алгоритм идентификации, последовательности или hilo для создания первичного ключа в зависимости от возможностей базовой базы данных.

используется для сопоставления свойства класса Java со столбцом в таблице базы данных. Атрибут имени элемента ссылается на свойство в классе, а атрибут столбца ссылается на столбец в таблице базы данных. Атрибут type содержит тип отображения hibernate, при этом типы отображения преобразуются из Java в тип данных SQL.

Документ сопоставления — это документ XML, имеющий в качестве корневого элемента , который содержит все элементы .

Элементы используются для определения конкретных отображений из классов Java в таблицы базы данных. Имя класса Java указывается с помощью атрибута name элемента class, а имя таблицы базы данных указывается с помощью атрибута table .

Элемент является необязательным и может использоваться для создания описания класса.

Источник

How to create Database Table using Hibernate

This article is going to describe how to create a database table from database using hibernate.

Introduction

A hibernate is an object relational mapping (ORM) tool, that is used to manipulate database tables as class and their object. We are using hibernate 3.6 version to create a database table.

Common Hibernate Terms:

A Hibernate is an object relational tool for database used in java to provide the accessibility of database contents using objects.

Читайте также:  HTML Объединение ячеек внутри строк и столбцов

hibernate.cfg : This is a hibernate configuration file, where database connection settings and all the required settings are listed to communicate with the database. This is a xml file that configures setting in xml tag format as listed below:

Listing 1: hibernate.cfg

This tag is the xml document type tag, which provides the required information about the document or hibernate configuration xml file.

: This is next and parent tag for the hibernate configuration. It is the base tag, containg all the hibernate configuration setting in its sub tags.

: This is sub tag of that hold all the required properties to communicate with the database, like database connection setting url, usernate, password and etc.

: This is the sub tag of , which describe all the required properties in order to communicate with the database like connection properties for database. All the required properties are listed below:

Database Connection Properties:

Driver Class Property :

This property defines the database connection string, which is database specific.

Connection Url Property :

This property defines the database connection url.

Database Username Property :

This property defines the database user name.

Database Password Property :

This property defines the database password.

JDBC Connection Pool Property :

This property defines the used pool size for the hibernate

SQL Dialect Property :

This property informs the hibernate about the used database so that hibernate could database specific queries automatically.

Second Level Cache Property :

This property tells the hibernate, whether there is a cache provider or not.

Show Sql Proper :

This property informs the hibernate to print all the executing queries on to the console.

hbm2ddl.auto property :

This property tell the hibernate to create or update database schema, while executing.

Mapping Tag :

This tag inform the hibernate, which class is to be treated as database or entity class.

Listing 2: Database Connection Properties

In the mapping tag of the hibernate.cfg file, TestTable was defined in the class attribute that represent a pojo class class, being referred to the database table.

The TestTale.Java File : This file defines a pojo class that is bean class having setter and getter methods for defines class variables. The class name is being referred to the database table sometimes and class variable name can be referred to the database attribute names respectively.

But these names can be altered as user defined using annotations and their properties.

To define a class as database table name, @Entity annotation has to write before the class declaration that tell the hibernate to use this class database entity class.

This annotation was defined in the class name javax.persistance.Entity class.

To define a primary key in the hibernate, annotation name @Id need to place before the class variable declaration.

This annotation was defined in the class name javax.persistance.Id;

To modify the database table name not same as the class name, name attribute of the @Entity annotation is used as follows:

To modify the attribute name of table not same as the class variable names, use annotation @Column with attribute name as follows:

This annotation is defined in the javax.persistance.Column

We can also place the @Id and @Column annotation before the getter methods instead of class variable declaration.

Listing 3: TestTale.Java File

To add data in to the database, it is necessary to go with the listed steps:

Add a configuration file with the class:

Читайте также:  Трасса М4 Дон платные участки карта города заправки

Create a session factory object that should be created for once for an application.

Create a session object from session factory object, this is request specific.

Create a transaction object from session session_beginTransaction()

Create a pojo class object and assign data using setter methods.

Now call persist method of session class to save data object into the database

Now Commit the database entry using commit() method of transaction class

Listing 4: AddToDB.java class

Add two library into your project as Hibernate3 and MySql Connector

Figure 1: Add two library into your project as Hibernate3 and MySql Connector

User Library jar files for Hibernate 3.6 and MySql Connector

Figure 2: User Library jar files for Hibernate 3.6 and MySql Connector

To run AddToDb Class from eclipse

Figure 3: To run AddToDb Class from eclipse

Result of hibernate running queries showing in the console, inserting a record in the database table

Figure 4: Result of hibernate running queries showing in the console, inserting a record in the database table

Conclusion:

In this article, we learned about:

  • Creating hibernate configuration file
  • Create POJO class for hibernate database table
  • Create Hibernate connection class to communicate with database.

Working in Software Development domain from 7 years now and is well equipped with programming languages like HTML, CSS, Java, PHP, .NET etc.

Источник



Пример использования Hibernate

В качестве примера мы с вами разработаем простой телефонный справочник, который будет хранить список контактов в базе данных ( PostgreSQL), при этом у каждого контакта будет ещё список телефонных номеров.

Создайте Maven-проект в любой удобной для вас IDE, лично я предпочитаю Idea IntelliJ, или же можно сгенерировать проект с помощью Maven командой:

mvn archetype:generate \
-DarchetypeGroupId=org.apache.maven.archetypes \
-DgroupId=tz.com \
-DartifactId=phone-book

После того как проект создан, откройте файл pom.xml и отредактируйте его чтобы он выглядел так:

В блоке у нас идёт список зависимостей для нашего проекта. В него я включил библиотеки для работы с Hibernate и Spring, а так же библиотеку для работы с базой данных PostgreSQL.

Так же хочу обратить внимание на exec-maven-plugin. Он позволяет запускать наш проект средствами Maven, что будет для нас крайне полезно. Для этого в директории проекта достаточно выполнить команду:

Обратите внимание что мы сделали ссылку на main-класс для exec-maven-plugin, который пока что не создали:

Теперь создайте в каталоге /src/main/resources/META-INF/sping файл beans.xml со следующим содержанием:

В beans.xml мы сконфигурировали DataSource, который содержит всю необходимую информацию для подключения к базе данных: класс JDBC-драйвера (в данном случае драйвер для PostgreSQL), URL, логин и пароль.

Затем мы создаём бин hibernateSessionFactory, используя класс LocalSessionFactoryBean из библиотеки Spring ORM. Этот класс позволяет нам сконфигурировать все настройки Hibernate в спринге, и инициализирует класс SessionFactory, с помощью которого осуществляется взаимодействие с базой данных.

Для бина hibernateSessionFactory мы задаём параметры, которые используются для инициализации SessionFactory:

  • DataSource, без которого мы не сможем установить подключение к базе данных.
  • Классы-сущности Hibernate, в параметре » annotatedClasses«. Они представляют собой описание структуры таблиц базы данных в виде объекта. Эти классы мы скоро создадим.
  • Настройки Hibernate в параметре » hibernateProperties«. Тут 2 очень важных момента, а именно это SQLDialect (в данном случае PostrgeSQLDialect), который должен быть выбран или определён в соответствии с той базой данных, которую мы планируем использовать, и параметр » hibernate.hbm2ddl.auto» который определяет может ли Hibernate создавать таблицы или редактировать их структуру, если их нет или они отличаются о того что описано в классах-сущностях. У нас параметр » hibernate.hbm2ddl.auto» имеет значение » update«, то есть в случае отсутствия необходимых таблиц в базе данных Hibernate их создаст.

Последним шагом мы конфигурируем в спринге класс PersonDaoImpl и передаём ему объект SessionFactory в качестве параметра.

Теперь в каталоге /src/main/java создайте пакет phone.book.dao и поместите туда интерфейс и класс, что описаны ниже:

Класс PersonDaoImpl умеет всего 2 вещи: сохранять объект Person в базу данных и получать из базы данных все сохранённые объекты Person. Класс Person описывает структуру таблицы PERSON из нашей базы данных. Забегая вперёд, скажу что у нас ещё будет таблица PHONES. Давайте создадим классы для этих таблиц в пакете phone.book.model

Классы-сущности Person и Phone заслуживают особого внимания, как я уже говорил, они являются объектным представлением таблиц базы данных для фреймворка Hibernate. Любой класс-сущность должен начинаться с аннотации @Entity. Далее в коде следует аннотация @Table, содержащая в качестве параметра название таблицы, которую описывает класс-сущность. Аннотация @Id указывает на то, что данное поле является индексом, аннотация @Column определяет соответствие переменной конкретному столбцу таблицы, а аннотация @GeneratedValue указывает на то что значение этого поля будет генерироваться автоматически.

У нас есть ещё один очень интересный момент. Дело в том что таблицы PERSON и PHONES имеют связь один ко многим, то есть у одного человека может быть несколько номеров телефона. Эта связь описана с помощью аннотации @OneToMany.

У нас всё готово для работы с базой данных, теперь осталось написать класс, который будет использовать всё что у нас уже есть. Создайте пакет phone.book.main и поместите туда главный класс для нашего приложения:

Тут всё довольно просто: мы получаем контекст спринга с помощью ClassPathXmlApplicationContext, достаём из контекста наш ДАО, инициализируем классы сущности с константными значениями и сохраняем информацию из этих классов в базе данных. Затем выводим на экран все контакты, которые сохранены в базе данных.

На всякий случай выкладываю скриншот с общей структурой нашего проекта:

Чтобы увидеть результат работы, соберите проект с помощью команды:

Источник

Hibernate не создает таблицы автоматически

У меня есть проект Maven с Hibernate / Spring / MySQL. У меня есть базовая сущность, и я хочу, чтобы Hibernate создавал таблицы автоматически, но Hibernate не создает никаких таблиц. Никаких исключений тоже не выдается, поэтому я понятия не имею, что здесь не так.

В User.java я также использую ломбок. Какие-либо предложения? Спасибо.

5 ответов

Я нашел решение. Проблема заключалась в том, что Application.java был в пакете com.example.BotApp. , теперь он находится в com.example. . Я не знаю, но как-то это помогло.

В моем случае я считаю, что, поскольку я использовал hibernate 5, hibernate 5 должен автоматически решать некоторые проблемы с форматированием таблицы столбцов, некоторые таблицы не были созданы, а другие были. Я DIFF файлы для анализа различий . и проблема была . Я использовал свойство, и это препятствовало созданию таблицы .

Я удалил columnDefinition = «DECIMAL(6,6) DEFAULT 0.00» , и таблицы были созданы нормально.

Если вы используете spring-data (что, я надеюсь, так и есть), удалите аннотацию @Table , Spring автоматически создаст таблицу с именем user только из <> . Минимальная конфигурация, которая должна входить в ваш application.propertes :

spring.jpa.hibernate.ddl-auto=update будет обновлять вашу таблицу БД (при необходимости) каждый раз, когда ваше приложение подключается к ней. Следует также создать его, если его нет. Другие значения create и create-drop , которые говорят сами за себя

Вам не хватает этого свойства в вашем файле свойств

Hibernate.hbm2ddl.auto автоматически проверяет и экспортирует DDL в схему при создании sessionFactory.

По умолчанию, это не делает никакого создания или модификации автоматически на БД. Если пользователь устанавливает значения обновить или создать или проверить или создать-отбрасывать , он выполняет изменение схемы DDL автоматически в соответствии с заданным значением.

Проверить изменение названия таблицы, это сработало для меня.

Источник