【Hibernate】Hibernate实体关系映射——单边的多对一关系
单边的多对一关系
单边的多对一关系与单边的一对多关系刚好相反,多方有一方的引用,一方没有多方的引用,但是他们的数据表间的关系是一样的。例如:论文与论文类别;
具体实现如下:
Type实体类的java注解配置比较简单。由于没有Article引用,Type就是最普通的POJO实体,主键为id属性,只有一个String类型的普通属性name。注意:name被配置为unique的,利用数据库提供的unique约束保证数据库中不会有重复的数据。
Type.java
package com.lmb.hibernate.bean;import javax.persistence.*;@Entity
@Table(name="tb_type")
public class Type {@Id@GeneratedValue(strategy = GenerationType.AUTO)private Integer id;@Column(unique = true)private String name;public Integer getId() {return id;}public void setId(Integer id) {this.id = id;}public String getName() {return name;}public void setName(String name) {this.name = name;}
}
Article属性中有一个Type类型的属性。该属性将配置为ManyToOne的。Article中配置了级联操作PERSIST,如果Type对象没有被持久化,则持久化Article对象是会一并持久化Type对象。由于content字段内容可能比较长,因此配置content列的数据库类型为text。如果要存储更多的内容,可配置为longtext。
Article.java
package com.lmb.hibernate.bean;import javax.persistence.*;@Entity
@Table(name="tb_article")
public class Article {@Id@GeneratedValue(strategy = GenerationType.AUTO)private Integer id;private String name;@Column(columnDefinition = "text")private String content;@ManyToOne(cascade = {CascadeType.PERSIST},fetch = FetchType.EAGER)@JoinColumn(name = "type_id")private Type type;//getters and setterspublic Integer getId() {return id;}public void setId(Integer id) {this.id = id;}public String getName() {return name;}public void setName(String name) {this.name = name;}public String getContent() {return content;}public void setContent(String content) {this.content = content;}public Type getType() {return type;}public void setType(Type type) {this.type = type;}
}
将两个实体配置到hibernate配置文件中。
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">
<!-- Generated by MyEclipse Hibernate Tools. -->
<hibernate-configuration><session-factory><property name="dialect">org.hibernate.dialect.MySQLDialect</property><property name="connection.url">jdbc:mysql://localhost:3306/hibernate?characterEncoding=UTF-8</property><property name="connection.username">lmb</property><property name="connection.password">lmb</property><property name="connection.driver_class">com.mysql.jdbc.Driver</property><mapping class="com.lmb.hibernate.bean.Person" /><mapping class="com.lmb.hibernate.bean.Email" /><mapping class="com.lmb.hibernate.bean.Type" /><mapping class="com.lmb.hibernate.bean.Article" /></session-factory></hibernate-configuration>
测试方法:
先实例化一个Type对象,一个Article对象,并设置批次的依赖关系。然后通过HibernateSessionFactory打开一个session会话,开启Transaction事务,然后保存Article对象。由于Article中设置了级联保存,保存Article时hibernate将自动级联保存Type对象。然后查询所有的Article并输出。查看结果。
【Hibernate】Hibernate实体关系映射——单边的多对一关系相关推荐
- 【Hibernate】hibernate实体关系映射——单边的多对多关系
//刘梦冰发表于2015-6-19 单边的多对多关系 多对一.一对多的关系只需要两个表即可,使用子表的外键与主表的主键连接就能存储主从关系.而对多对多的关系至少需要三个表,其中两个表保存两个实体类,另 ...
- 【Hibernate】Hibernate实体关系映射——双边的多对多关系
//刘梦冰发表于2015-6-19 http://blog.csdn.net/lmb55/article/details/46565581讲述了单边的多对多关系,本文在该例的基础上近一步学习双边的多对 ...
- 【Hibernate】Hibernate实体映射——单边的一对多关系
数据库中的表是有关系的,两个表之间可以通过外键关联.如果把表抽象为实体类,这些关系可以抽象为实体之间的一对一,一对多,多对一等关系.hibernate能处理这些复杂的关系,前提是要正确配置这些关系. ...
- 【Hibernate】Hibernate实体关系映射——单边的一对一关系
//刘梦冰发表于2015-6-19 一对对一关系的情况要多一些,不仅在POJO层体现为一对一的,还要保证数据库中的关系是一对一的,不允许出现一个表的两行记录共用另一个表中同一行记录的情况.这可以通过设 ...
- 【HibernateHibernate实体关系映射——双边的多对一、一对多关系
双边的多对一.一对多关系 双边关系是最常见的配置.在多方有一方的引用,一方也有多方的引用.双边关系能够很方便的查询数据.下面以一个班级与学生的双边关系来深入学习. 班级(clazz类)与学生(stud ...
- hibernate 表关系映射详解之继承关系
举例:亚马逊的网上商城可以卖很多东西,比如说图书,电器,水果等等,那么我们以面向对象的理念去抽象一个商品类,他具有商品的共有属性,比如说上架时间,当前 价格,优惠价格等待,商品可以继承 ...
- Hibernate关系映射
Hibernate关系映射 Hibernate关系映射其实就是将关系模型中实体之间的三种关系--多对一(一对多).一对一.多对多映射成对象模型--Java这样的面向对象语言中相应的属性之间的关系. 多 ...
- Spring Boot 入门系列(二十八) JPA 的实体映射关系,一对一,一对多,多对多关系映射!...
前面讲了Spring Boot 使用 JPA,实现JPA 的增.删.改.查的功能,同时也介绍了JPA的一些查询,自定义SQL查询等使用.JPA使用非常简单,功能非常强大的ORM框架,无需任何数据访问层 ...
- Hibernate旅程(五)Hibernate映射--基本类映射和对象关系映射
回想一些我们在没有学习ssh的时候,我们建立数据库的表时,首先是数据库建模E-R图,然后再通过实体模型来建立关系模型,再建立相应的表.实体间存在三种关系,一对一,一对多(或者说多对一),多对多.而如今 ...
最新文章
- GODADDY主机用tar命令通过SSH远程打包20M以上的文件
- 设置Eclipse中的Courier New字体
- 【数据结构与算法】之深入解析“最大矩形”的求解思路和算法示例
- php开发用框架优缺点,剖析PHP开发中主流PHP框架的优缺点
- 扬尘监测系统_工地扬尘监测_工地扬尘监测解决方案
- php语言中字符,PHP开发语言中字符窜的高效率写法
- 使用Jasmine,Spock和Nashorn测试JVM服务器端JavaScript
- 市值突破3000亿,Fortinet发布2021Q2财报
- teamviewer开通防火墙策略
- 小米手机鸿蒙开机动画,华为“鸿蒙”来了!开机动画美炸了,用PPT一分钟就搞定...
- 计算机组成原理与汇编语言设计,计算机组成原理与汇编语言网络教学整体设计方案...
- oracle dataaccess component,Oracle Data Access Components (ODAC)
- Linux系统增加新硬盘
- oracle递归查询用法
- Integrated Skills of English_Unit2_Why My Great-uncle Gave Up the Ministry
- 共享汽车数据分析调研案例报告
- jzoj 1594: 【USACO】The Chivalrous Cow(骑士牛)( 待加入)
- 华为linux是否支持背光键盘,华为笔记本背光键盘怎么开
- HTML网页获取当前定位经纬度/地理位置定位/百度定位/高德定位
- 完整的生产车间管理流程是怎样的?六大步骤分享