[Hibernate] - one to many
事实上one to many 和 many to one是一样的,这是一个相互的过程。
hibernate.cfg.xml
- <?xml version="1.0" encoding="UTF-8"?>
- <!DOCTYPE hibernate-configuration PUBLIC
- "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
- "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
- <hibernate-configuration>
- <session-factory>
- <!-- Database connection settings -->
- <property name="connection.driver_class">com.mysql.jdbc.Driver</property>
- <property name="connection.url">jdbc:mysql://127.0.0.1/testdb</property>
- <property name="connection.username">root</property>
- <property name="connection.password"></property>
- <!-- JDBC connection pool (use the built-in) -->
- <property name="connection.pool_size">1</property>
- <!-- SQL dialect -->
- <property name="dialect">org.hibernate.dialect.MySQL5Dialect</property>
- <!-- Enable Hibernate's automatic session context management -->
- <property name="current_session_context_class">thread</property>
- <!-- Disable the second-level cache -->
- <property name="cache.provider_class">org.hibernate.cache.internal.NoCacheProvider</property>
- <!-- Echo all executed SQL to stdout -->
- <property name="show_sql">true</property>
- <!-- Drop and re-create the database schema on startup -->
- <property name="hbm2ddl.auto">update</property>
- <mapping resource="com/my/hbm/User.hbm.xml"/>
- <mapping resource="com/my/hbm/Card.hbm.xml"/>
- </session-factory>
- </hibernate-configuration>
User.hbm.xml
- <?xml version="1.0" encoding="UTF-8"?>
- <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
- "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
- <hibernate-mapping>
- <class name="com.my.bean.User" table="user">
- <id name="id" type="long" column="id">
- <generator class="native"></generator>
- </id>
- <property name="userName" column="user_name" type="java.lang.String" length="100" not-null="true"/>
- <set name="card" cascade="all">
- <key column="user_id"/>
- <one-to-many class="com.my.bean.Card"/>
- </set>
- </class>
- </hibernate-mapping>
Card.hbm.xml
- <?xml version="1.0" encoding="UTF-8"?>
- <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
- "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
- <hibernate-mapping>
- <class name="com.my.bean.Card" table="card">
- <id name="id" column="id" type="long">
- <generator class="native"></generator>
- </id>
- <many-to-one name="user" column="user_id" class="com.my.bean.User" not-null="true" cascade="save-update"></many-to-one>
- <property name="cardName" column="card_name" type="java.lang.String" length="100" not-null="true"/>
- </class>
- </hibernate-mapping>
POJO:
- package com.my.bean;
- import java.util.Set;
- public class User {
- private long id;
- private String userName;
- private Set<Card> card;
- public long getId() {
- return id;
- }
- public void setId(long id) {
- this.id = id;
- }
- public String getUserName() {
- return userName;
- }
- public void setUserName(String userName) {
- this.userName = userName;
- }
- public Set<Card> getCard() {
- return card;
- }
- public void setCard(Set<Card> card) {
- this.card = card;
- }
- }
- package com.my.bean;
- public class Card {
- private long id;
- private String cardName;
- private User user;
- public long getId() {
- return id;
- }
- public void setId(long id) {
- this.id = id;
- }
- public String getCardName() {
- return cardName;
- }
- public void setCardName(String cardName) {
- this.cardName = cardName;
- }
- public User getUser() {
- return user;
- }
- public void setUser(User user) {
- this.user = user;
- }
- }
Test:
- package com.my.init;
- import java.util.HashSet;
- import org.hibernate.Session;
- import org.hibernate.Transaction;
- import com.my.bean.Card;
- import com.my.bean.User;
- import com.my.dao.util.HibernateUtil;
- public class Test {
- public static void main(String[] args) {
- Session session = HibernateUtil.getSessionFactory().openSession();
- Transaction tx = session.beginTransaction();
- try {
- // create user
- User user = new User();
- user.setUserName("Robin");
- // create card for CBC
- Card cardCBC = new Card();
- cardCBC.setCardName("CBC");
- cardCBC.setUser(user);
- // create card for BBC
- Card cardBBC = new Card();
- cardBBC.setCardName("BBC");
- cardBBC.setUser(user);
- // add user card
- user.setCard(new HashSet<Card>());
- user.getCard().add(cardCBC);
- user.getCard().add(cardBBC);
- // save action
- session.save(user);
- session.save(cardCBC);
- session.save(cardBBC);
- tx.commit();
- } catch (Exception e) {
- tx.rollback();
- e.printStackTrace();
- } finally {
- session.close();
- }
- }
- }
在Card.hbm.xml中如果去掉many-to-one节点和在Card bean中移除user的getter/setter,事实上在DB生成的数据表结构是一样的。
如果移除这个many-to-one,那么在使用时,可以不需要setUser(..)。可以简洁的写代码。
但一般情况下,user和card是相互的,对user来说是一对多,对card来说是多对一。所以在user中写one-to-many,在card中写many-to-one.
参考引用:
http://www.tutorialspoint.com/hibernate/hibernate_one_to_many_mapping.htm
[Hibernate] - one to many的更多相关文章
- hibernate多对多关联映射
关联是类(类的实例)之间的关系,表示有意义和值得关注的连接. 本系列将介绍Hibernate中主要的几种关联映射 Hibernate一对一主键单向关联Hibernate一对一主键双向关联Hiberna ...
- 解决 Springboot Unable to build Hibernate SessionFactory @Column命名不起作用
问题: Springboot启动报错: Caused by: org.springframework.beans.factory.BeanCreationException: Error creati ...
- hibernate多对一双向关联
关联是类(类的实例)之间的关系,表示有意义和值得关注的连接. 本系列将介绍Hibernate中主要的几种关联映射 Hibernate一对一主键单向关联Hibernate一对一主键双向关联Hiberna ...
- Hibernate中事务的隔离级别设置
Hibernate中事务的隔离级别,如下方法分别为1/2/4/8. 在Hibernate配置文件中设置,设置代码如下
- Hibernate中事务声明
Hibernate中JDBC事务声明,在Hibernate配置文件中加入如下代码,不做声明Hibernate默认就是JDBC事务. 一个JDBC 不能跨越多个数据库. Hibernate中JTA事务声 ...
- spring applicationContext.xml和hibernate.cfg.xml设置
applicationContext.xml配置 <?xml version="1.0" encoding="UTF-8"?> <beans ...
- [原创]关于Hibernate中的级联操作以及懒加载
Hibernate: 级联操作 一.简单的介绍 cascade和inverse (Employee – Department) Casade用来说明当对主对象进行某种操作时是否对其关联的从对象也作类似 ...
- hibernate的基本xml文件配置
需要导入基本的包hibernate下的bin下的required和同bin下optional里的c3p0包下的所有jar文件,当然要导入mysql的驱动包了.下面需要注意的是hibernate的版本就 ...
- Maven搭建SpringMVC+Hibernate项目详解 【转】
前言 今天复习一下SpringMVC+Hibernate的搭建,本来想着将Spring-Security权限控制框架也映入其中的,但是发现内容太多了,Spring-Security的就留在下一篇吧,这 ...
- 1.Hibernate简介
1.框架简介: 定义:基于java语言开发的一套ORM框架: 优点:a.方便开发; b.大大减少代码量; c.性能稍高(不能与数据库高手相比,较一般数据库使用者 ...
随机推荐
- I - Tri Tiling
Time Limit:1000MS Memory Limit:65536KB 64bit IO Format:%I64d & %I64u Submit Status #in ...
- static 静态代码块 动态代码块 单例
1. 共享,不属于对象,属于类,类成员变量,任何一个类的对象都有该属性,一旦被修改,则其他对象中的该属性也被更改. 2. 类中方法是static的,可以通过类名直接访问,不用new一个该类的对象. 3 ...
- 【Bear】api分类
参考 jQuery API 中文文档
- CentOS下安装keepalived 进行服务器热备
一.准备: 1.1 安装依赖软件 如果系统为基本文本安装,需要安装一下软件 yum -y install ipvsadm yum -y install kernel kernel-devel reb ...
- 搭建 hexo,在执行 hexo deploy 后,出现 error deployer not found:github 的错误
hexo 更新到3.0之后,deploy的type 的github需要改成git 改了之后执行npm install hexo-deployer-git --save 然后再部署试试 官网说明: ht ...
- Android Bitmap OOM处理
public int calculateInSampleSize(BitmapFactory.Options option, int rWidth, int rHeight) { ...
- Scrum第一天任务认领情况
在团队项目“广商百货”的SCRUM项目中我认领的任务是对登录注册界面进行完善.具体功能还没有实现,还在学习中...
- String类、正则表达式
一.String类 String使用非常频繁,用来描述一个字符串.String中实现了很多 对字符串方便的操作方法. String内部使用char[]实现字符串的数据保存 字符串的&quo ...
- Spring Data Jpa 详解
前言: JPA全称Java Persistence API,即Java持久化API,它为Java开发人员提供了一种对象/关系映射工具来管理Java应用中的关系数据,结合其他ORM的使用,能达到简化开发 ...
- js部分---数组及练习题;
数据存储--数组: 强类型语言数组 1.同一类型的数据存储的集合,在内存中是连续的 2.定义的时候需要制定长度 弱类型语言数组 1.可以存储任意类型的数据 2.在内存中不连续,不需要制定长度 定义一个 ...