Hibernate - пример «один к одному» (сопоставление XML)
Отношения один-к-одному возникают, когда один объект связан точно с одним вхождением другого объекта.
В этом руководстве мы покажем вам, как работать с табличными отношениями «один к одному» в Hibernate, с помощью файла сопоставления XML (hbm).
Инструменты и технологии, используемые в этих уроках:
-
Hibernate 3.6.3.Final
-
MySQL 5.1.15
-
Maven 3.0.3
-
Затмение 3.6
Структура проекта
Смотрите окончательную структуру проекта этого урока.
Зависимость проекта
Получитеhibernate.jar из репозитория JBoss, Maven позаботится обо всех связанных зависимостях за вас.
Файл: pom.xml
JBoss repository http://repository.jboss.org/nexus/content/groups/public/ mysql mysql-connector-java 5.1.15 org.hibernate hibernate-core 3.6.3.Final javassist javassist 3.12.1.GA
1. Таблица «один-к-одному»
При разработке таблицы отношенийone-to-one таблица STOCK содержит ровно одну запись в таблице STOCK_DETAIL. Обе таблицы имеют одинаковый Stock_Id в качестве первичного ключа. В таблице STOCK_DETAIL Stock_Id является первичным ключом, а также внешним ключом таблицы STOCK. Это распространенный способ определения табличных отношений «один к одному».
Чтобы получить сценарий таблицы STOCK и STOCK_DETAIL, обратитесь к следующему «http://www.example.com/mysql/how-to-define-one-to-one-relationship-in-mysql/[одно к одной связи таблицы в MySQL] ».
2. Спящий модельный класс
Создайте два класса модели -Stock.java
иStockDetail.java
, чтобы представить приведенные выше таблицы.
Файл: Stock.java
package com.example.stock; public class Stock implements java.io.Serializable { private Integer stockId; private String stockCode; private String stockName; private StockDetail stockDetail; //constructor & getter and setter methods }
Файл: StockDetail.java
package com.example.stock; public class StockDetail implements java.io.Serializable { private Integer stockId; private Stock stock; private String compName; private String compDesc; private String remark; private Date listedDate; //constructor & getter and setter methods }
3. Hibernate XML Mapping
Теперь создайте два файла отображения Hibernate (hbm) -Stock.hbm.xml
иStockDetail.hbm.xml
.
Файл: Stock.hbm.xml
Файл: StockDetail.hbm.xml
stock
Note
Основная трудность в этом соотношенииone-to-one заключается в том, что им обоим назначен один и тот же первичный ключ. В StockDetail.hbm.xml объявлен специальныйforeign identifier generator, он будет знать значение первичного ключа из таблицы STOCK. С ограниченным = «истина», он гарантирует, что запас должен существовать.
4. Файл конфигурации Hibernate
ПомещаетStock.hbm.xml
иStockDetail.hbm.xml
в ваш файл конфигурации Hibernate, а также детали подключения MySQL.
_
Файл: hibernate.cfg.xml_
com.mysql.jdbc.Driver jdbc:mysql://localhost:3306/exampledb root password org.hibernate.dialect.MySQLDialect true
5. Запустить его
Запустите его, Hibernate вставит строку в таблицу STOCK и строку в таблицу STOCK_DETAIL.
Файл: App.java
package com.example; import java.util.Date; import org.hibernate.Session; import com.example.stock.Stock; import com.example.stock.StockDetail; import com.example.util.HibernateUtil; public class App { public static void main(String[] args) { System.out.println("Hibernate one to one (XML mapping)"); Session session = HibernateUtil.getSessionFactory().openSession(); session.beginTransaction(); Stock stock = new Stock(); stock.setStockCode("4715"); stock.setStockName("GENM"); StockDetail stockDetail = new StockDetail(); stockDetail.setCompName("GENTING Malaysia"); stockDetail.setCompDesc("Best resort in the world"); stockDetail.setRemark("Nothing Special"); stockDetail.setListedDate(new Date()); stock.setStockDetail(stockDetail); stockDetail.setStock(stock); session.save(stock); session.getTransaction().commit(); System.out.println("Done"); } }
Выход
Hibernate one to one (XML mapping) Hibernate: insert into exampledb.stock (STOCK_CODE, STOCK_NAME) values (?, ?) Hibernate: insert into exampledb.stock_detail (COMP_NAME, COMP_DESC, REMARK, LISTED_DATE, STOCK_ID) values (?, ?, ?, ?, ?) Done
Hibernate Annotation
Для однозначной аннотации Hibernate см. этотexample
Скачать -Hibernate-one-to-one-xml-mapping.zip (10 КБ)